diff --git a/.claude/skills/review-pr/SKILL.md b/.claude/skills/review-pr/SKILL.md index 81ec7c8..7d6ea2d 100644 --- a/.claude/skills/review-pr/SKILL.md +++ b/.claude/skills/review-pr/SKILL.md @@ -21,40 +21,73 @@ Use the GitHub MCP tools to read the PR details. If the PR has merge conflicts, Read the PR diff. Focus only on changes to `README.md`. If the PR modifies files other than `README.md` (like `parse.py`, `site/`, etc.), flag this as unusual — most contributions should only touch `README.md`. -### Step 4: Validate each added entry +### Step 4: Automatic rejection checks + +Reject the PR immediately (close with a polite comment) if any of these apply: + +- **Multiple projects in one PR** — each PR should add exactly one project. +- **Empty PR description** — the contributor must explain what they're adding. +- **Duplicate** — the project name or URL is already in `README.md` or in a recently closed PR. +- **Archived or abandoned** — the project has no activity in 12+ months. + +### Step 5: Validate each added entry For every new line added to `README.md`, check the following: -#### 4a. Entry format +#### 5a. Entry format -Each entry MUST match this exact pattern: +Each entry MUST match one of these accepted formats: +**GitHub project:** ``` -- [Project Name](https://url) - Short description ending with a period. +- [Project Name](https://github.com/owner/repo) - Short description ending with a period. ``` -Specifically: +**Project with website and GitHub repo:** +``` +- [Project Name](https://project-site.com) - Short description ending with a period. [GitHub](https://github.com/owner/repo) +``` + +**CRAN project (with optional GitHub link):** +``` +- [Package Name](https://cran.r-project.org/package=pkgname) - Short description ending with a period. +- [Package Name](https://cran.r-project.org/package=pkgname) - Short description ending with a period. [GitHub](https://github.com/owner/repo) +``` + +**PyPI project (with optional GitHub link):** +``` +- [package-name](https://pypi.org/project/package-name/) - Short description ending with a period. +- [package-name](https://pypi.org/project/package-name/) - Short description ending with a period. [GitHub](https://github.com/owner/repo) +``` + +The core regex used by `parse.py` to extract entries is: `^\s*- \[(.*)\]\((.*)\) - (.*)$` + +Specifically check: - Starts with `- ` (dash + space) - Followed by a markdown link `[Name](URL)` - Followed by ` - ` (space, dash, space) - Followed by a description that ends with a period `.` - -The regex used by `parse.py` to extract entries is: `^\s*- \[(.*)\]\((.*)\) - (.*)$` +- The period must come before the optional `[GitHub](url)` link +- The `[GitHub]` link, if present, must use the exact format `[GitHub](https://github.com/owner/repo)` If the entry doesn't match, report exactly what's wrong (missing period, wrong separator, etc.). -#### 4b. URL validation +#### 5b. URL validation -- **GitHub URLs are preferred.** If the URL points to `github.com`, that's ideal — no warning needed. -- **Non-GitHub URLs**: If the URL points somewhere else (PyPI, personal site, docs site, etc.), flag it with a warning: "This is not a GitHub URL. GitHub repos are preferred because they allow automated tracking of activity and archive status. Consider whether a GitHub link exists for this project." -- Check that the URL looks well-formed (starts with `https://`). +- **GitHub URLs are preferred.** If the primary URL points to `github.com`, that's ideal. +- **CRAN URLs** (`cran.r-project.org`) are acceptable for R packages. +- **PyPI URLs** (`pypi.org`) are acceptable for Python packages. +- **Non-GitHub URLs with `[GitHub]` link**: If the primary URL is a project website but includes a `[GitHub](url)` link in the description, that's the preferred format for non-GitHub projects. +- **Non-GitHub URLs without `[GitHub]` link**: Flag with a suggestion to add a `[GitHub](url)` link if one exists, since GitHub repos enable automated tracking of stars and activity. +- All URLs must use `https://`. -#### 4c. Section placement +#### 5c. Section placement -Look at which `##` (language) and `###` (category) heading the entry was added under. Evaluate whether the project fits that section based on its description and URL: +Look at which `##` (language) and `###` (category) heading the entry was added under. Evaluate whether the project fits that section: - Does the project's language match the section? (e.g., a Python library should be under `## Python`) - Does the project's purpose match the category? (e.g., a backtesting framework should be under `### Trading & Backtesting`, not `### Indicators`) +- Commercial/proprietary projects must go under `## Commercial & Proprietary Services`. - If the placement seems wrong, suggest a better section. The current sections in the README are: @@ -67,13 +100,20 @@ The current sections in the README are: **Cross-language**: Frameworks, Reproducing Works Training & Books +**Commercial & Proprietary Services** + If the project doesn't fit any existing section, suggest the closest match or recommend creating a new subsection (rare). -#### 4d. Duplicate check +#### 5d. Duplicate check Grep the current `README.md` for the project name and URL to ensure it's not already listed. -### Step 5: Summarize findings +#### 5e. Quality check + +- **Active**: Project should show recent activity (commits within the last 12 months). +- **Documented**: Project should have a clear README with usage examples. + +### Step 6: Summarize findings Present a clear summary: @@ -87,22 +127,26 @@ Entries reviewed: - [Name](URL) - Description Format: OK / ISSUE:
- URL: GitHub / WARNING: Non-GitHub URL () + URL: GitHub / CRAN / PyPI / WARNING:
Section: OK (
) / SUGGESTION: Move to
Duplicate: No / YES: Already listed at line + Quality: OK / WARNING:
Conflicts: None / YES: Needs rebase -Verdict: APPROVE / NEEDS CHANGES +Verdict: APPROVE / NEEDS CHANGES / REJECT ``` -### Step 6: Take action +### Step 7: Take action - **If everything passes**: Ask the user for confirmation, then approve and merge the PR. -- **If there are issues**: Leave a constructive review comment on the PR listing what needs to be fixed. Be polite and specific — these are open-source contributors. +- **If there are fixable issues**: Leave a constructive review comment on the PR listing what needs to be fixed. Be polite and specific — these are open-source contributors. Link to `CONTRIBUTING.md` for reference. +- **If it should be rejected** (automatic rejection criteria): Close the PR with a polite explanation and link to `CONTRIBUTING.md`. When leaving comments, be friendly and grateful for the contribution. Example tone: > Thanks for the contribution! A couple of things to address before we can merge: > - The description should end with a period. -> - Consider linking to the GitHub repo instead of the docs site so we can track activity. +> - Consider adding a `[GitHub](url)` link so we can track activity. +> +> Please see our [contributing guidelines](https://github.com/wilsonfreitas/awesome-quant/blob/master/CONTRIBUTING.md) for the accepted entry formats. diff --git a/.claude/skills/sync-site/SKILL.md b/.claude/skills/sync-site/SKILL.md deleted file mode 100644 index 312ec01..0000000 --- a/.claude/skills/sync-site/SKILL.md +++ /dev/null @@ -1,79 +0,0 @@ ---- -name: sync-site -description: Sync site/index.qmd with README.md content. Use this skill whenever README.md has been updated and the site needs to reflect those changes — after merging PRs, editing entries, adding libraries, or any modification to README.md. Also triggers for "update site", "sync site", "deploy site", "update qmd", or mentions of site/index.qmd being out of date. ---- - -# Sync Site - -Update `site/index.qmd` to match the current `README.md` content, then commit and push. - -## How it works - -`site/index.qmd` is composed of two parts: - -1. **YAML frontmatter** (lines 1-11) — Quarto metadata that never changes. Preserve it exactly as-is. -2. **Body content** — Everything from `## Python` to the end of the file. This must match `README.md` from the `## Python` heading onward. - -The preamble in README.md (title, badges, language table of contents) is intentionally excluded from `index.qmd` because the Quarto frontmatter replaces it. - -## Steps - -### 1. Extract the frontmatter from index.qmd - -Read `site/index.qmd` and capture everything up to and including the closing `---` and the blank line + description + badge lines that follow it (lines 1-16). - -The header looks like this: -``` ---- -title: "Awesome Quant" -... ---- - -A curated list of insanely awesome libraries, packages and resources for Quants (Quantitative Finance). - -[![](https://awesome.re/badge.svg)](https://awesome.re) -``` - -### 2. Extract the body from README.md - -Read `README.md` and capture everything starting from the line `## Python` (inclusive) to the end of the file. - -### 3. Combine and write - -Concatenate the frontmatter header and the README body, then write to `site/index.qmd`. - -Use a shell script for reliability: - -```bash -# Extract line number where "## Python" starts in README.md -START=$(grep -n '^## Python' README.md | head -1 | cut -d: -f1) - -# Extract frontmatter + preamble from index.qmd (up to the badge line) -END=$(grep -n 'awesome.re/badge' site/index.qmd | head -1 | cut -d: -f1) - -# Combine: header from qmd + body from README -{ head -n "$END" site/index.qmd; echo; tail -n +"$START" README.md; } > site/index.qmd.tmp -mv site/index.qmd.tmp site/index.qmd -``` - -### 4. Verify - -Run a quick diff to confirm the update looks correct: - -```bash -# Show line count to sanity-check -wc -l site/index.qmd - -# Optionally diff the body portion to confirm they match -diff <(tail -n +"$START" README.md) <(sed -n "$((END+2)),\$p" site/index.qmd) -``` - -### 5. Commit and push - -Stage, commit, and push the change: - -```bash -git add site/index.qmd -git commit -m "Sync site/index.qmd with README.md" -git push origin main -``` diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 9c363fb..a0c5f71 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -19,38 +19,22 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - uses: actions/setup-python@v4 + - uses: astral-sh/setup-uv@v6 + - uses: actions/setup-python@v5 with: python-version: '3.x' - - name: Install Poetry - run: | - pip install poetry - name: Install dependencies run: | - poetry install --no-root --no-interaction + uv sync --no-install-project - name: Run parser run: | export GITHUB_ACCESS_TOKEN=${{ secrets.GITHUB_TOKEN }} - poetry run python parse.py - - uses: r-lib/actions/setup-r@v2 - with: - r-version: '4.2.0' # The R version to download (if necessary) and use. - - uses: r-lib/actions/setup-r-dependencies@v2 - with: - packages: - any::knitr - any::rmarkdown - any::DT - - name: setup Quarto - uses: quarto-dev/quarto-actions/setup@v2 - - name: Render site + uv run python parse.py + - name: Generate site run: | - quarto render site - - name: Check site - run: | - ls -l site/docs + uv run python site/generate.py - name: Deploy pages uses: peaceiris/actions-gh-pages@v3 with: github_token: ${{ secrets.GITHUB_TOKEN }} - publish_dir: site/docs \ No newline at end of file + publish_dir: site diff --git a/.gitignore b/.gitignore index 8a209c2..aa0b627 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,4 @@ env.ps1 .vscode -/.quarto/ github.ipynb build.sh \ No newline at end of file diff --git a/CLAUDE.md b/CLAUDE.md index 3249591..6173e2e 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -13,9 +13,9 @@ A companion website is generated from this data and deployed to GitHub Pages. The pipeline works as follows: 1. **`README.md`** — The source of truth. All library entries follow the format: `- [name](url) - Description.` -2. **`parse.py`** — Parses `README.md`, extracts GitHub repo URLs, fetches last commit dates via the GitHub API (using `PyGithub` with multithreading), and writes `site/projects.csv`. -3. **`site/`** — A [Quarto](https://quarto.org/) website project (`_quarto.yml`) that renders `projects.csv` into an interactive table. Output goes to `site/docs/`. -4. **CI** (`.github/workflows/build.yml`) — Runs daily and on push to `master`: runs `parse.py`, renders the Quarto site, and deploys to GitHub Pages via `gh-pages` branch. +2. **`parse.py`** — Parses `README.md`, extracts GitHub/CRAN/PyPI URLs, fetches last commit dates and stars via the GitHub API (using `PyGithub` with multithreading), and writes `site/projects.csv`. +3. **`site/generate.py`** — Reads `projects.csv` (or parses `README.md` directly) and generates a static HTML site with search, filtering, sorting, and dark mode. +4. **CI** (`.github/workflows/build.yml`) — Runs daily and on push to `main`: runs `parse.py`, runs `site/generate.py`, and deploys to GitHub Pages via `gh-pages` branch. Supporting scripts: - `cranscrape.py` — Scrapes CRAN package pages to find associated GitHub repos; writes `cran.csv`. @@ -24,21 +24,29 @@ Supporting scripts: ## Commands ```bash -# Install dependencies (uses Poetry, requires Python 3.11+) -poetry install --no-root +# Install dependencies (uses uv, requires Python 3.11+) +uv sync --no-install-project # Run the parser (requires GITHUB_ACCESS_TOKEN env var) -GITHUB_ACCESS_TOKEN= poetry run python parse.py +GITHUB_ACCESS_TOKEN= uv run python parse.py -# Render the Quarto site (requires Quarto + R with knitr/rmarkdown/DT) -quarto render site +# Generate the static site +uv run python site/generate.py ``` ## Contributing Entries -Each entry in `README.md` must follow the pattern: +See `CONTRIBUTING.md` for full guidelines. Accepted entry formats: + ``` -- [Project Name](https://url) - Short description ending with a period. +- [Project Name](https://github.com/owner/repo) - Description ending with a period. +- [Project Name](https://site.com) - Description ending with a period. [GitHub](https://github.com/owner/repo) +- [Package Name](https://cran.r-project.org/package=pkg) - Description ending with a period. +- [package-name](https://pypi.org/project/pkg/) - Description ending with a period. ``` -Entries are grouped under language headings (##) and category subheadings (###). `parse.py` relies on this exact regex pattern to extract entries: `^\s*- \[(.*)\]\((.*)\) - (.*)$` +CRAN and PyPI entries may optionally append `[GitHub](url)` after the description. + +Entries are grouped under language headings (`##`) and category subheadings (`###`). Commercial/proprietary projects go under `## Commercial & Proprietary Services`. + +`parse.py` relies on this regex to extract entries: `^\s*- \[(.*)\]\((.*)\) - (.*)$` diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..53bb3e2 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,82 @@ +# Contributing + +Your contributions are always welcome! Please ensure your pull request meets the following guidelines. + +## Entry Format + +Each entry must follow one of these formats: + +### GitHub project + +```markdown +- [Project Name](https://github.com/owner/repo) - Short description ending with a period. +``` + +### Project with website and GitHub repo + +For projects that have a dedicated website, link to the site and append the GitHub repo in the description: + +```markdown +- [Project Name](https://project-site.com) - Short description ending with a period. [GitHub](https://github.com/owner/repo) +``` + +### CRAN project + +Link to the CRAN package page. If the project has a GitHub repo, append it after the description: + +```markdown +- [Package Name](https://cran.r-project.org/package=pkgname) - Short description ending with a period. +- [Package Name](https://cran.r-project.org/package=pkgname) - Short description ending with a period. [GitHub](https://github.com/owner/repo) +``` + +### PyPI project + +Link to the PyPI package page. If the project has a GitHub repo, append it after the description: + +```markdown +- [package-name](https://pypi.org/project/package-name/) - Short description ending with a period. +- [package-name](https://pypi.org/project/package-name/) - Short description ending with a period. [GitHub](https://github.com/owner/repo) +``` + +### General rules + +- Use `https://` URLs only. +- GitHub repository URLs are strongly preferred. Projects with GitHub repos get automated tracking of stars, activity, and archive status on [awesome-quant.com](https://awesome-quant.com/). +- The description must end with a period (before the `[GitHub]` link, if present). +- Keep descriptions concise — one sentence. + +## Quality Requirements + +- **Active**: Project must show recent activity (commits within the last 12 months). +- **Documented**: Clear README with usage examples. + + +## Commercial & Proprietary Projects + +Commercial and proprietary projects are welcome. They will be placed under the **Commercial & Proprietary Services** section. Include a link to the product website and a brief description of what it offers. + +## Section Placement + +Add your entry under the correct language heading (`##`) and category subheading (`###`). If the project is a Python backtesting library, it goes under `## Python` → `### Trading & Backtesting`, not under `### Indicators`. + +If no existing category fits, suggest a new one in your PR description. + +## One Project Per PR + +Submit one project per pull request. This makes review faster and keeps the git history clean. + +## Before Submitting + +1. Search the existing list to make sure the project is not already included. +2. Search previous Pull Requests (open and closed) to avoid duplicates. +3. Make sure the entry format matches exactly — our parser relies on it. + +## Automatic Rejection + +PRs will be closed if: + +- Multiple projects added in a single PR. +- Entry format does not match the required pattern. +- Duplicate of an existing entry or a recently closed PR. +- Project is archived or abandoned. +- Empty PR description. diff --git a/parse.py b/parse.py index aaee82e..67692e9 100644 --- a/parse.py +++ b/parse.py @@ -1,8 +1,11 @@ +import json import os import re -import pandas as pd +from html.parser import HTMLParser from threading import Thread +from urllib.request import urlopen +import pandas as pd from github import Auth, Github # using an access token @@ -21,7 +24,6 @@ def extract_repo(url): def extract_github_url(description): """Extract GitHub URL from description if present.""" - # Look for [GitHub](https://github.com/...) pattern github_pattern = re.compile(r"\[GitHub\]\((https://github\.com/[\w-]+/[-\w\.]+)\)") m = github_pattern.search(description) if m: @@ -29,25 +31,137 @@ def extract_github_url(description): return "" -def get_last_commit(repo): +def get_cran_info(url): + """Fetch Published date and GitHub URL from a CRAN package page. + + Returns (published_date, github_url) — either may be empty string. + """ + try: + m = re.search(r"package=(\w+)", url) or re.search( + r"/packages/(\w+)", url + ) + if not m: + return "", "" + pkg = m.group(1) + page_url = f"https://cran.r-project.org/web/packages/{pkg}/index.html" + with urlopen(page_url, timeout=10) as resp: + page_html = resp.read().decode("utf-8", errors="replace") + + class CranParser(HTMLParser): + def __init__(self): + super().__init__() + self._in_td = False + self._found_published = False + self._in_github_span = False + self.date = "" + self.github_url = "" + + def handle_starttag(self, tag, attrs): + if tag == "td": + self._in_td = True + # GitHub links are wrapped in + if tag == "span": + classes = dict(attrs).get("class", "") + if "GitHub" in classes: + self._in_github_span = True + # Also check for github.com links + if tag == "a" and not self.github_url: + href = dict(attrs).get("href", "") + if "github.com" in href and "/issues" not in href: + self.github_url = href + + def handle_endtag(self, tag): + if tag == "td": + self._in_td = False + if tag == "span": + self._in_github_span = False + + def handle_data(self, data): + if self._in_td: + if data.strip() == "Published:": + self._found_published = True + elif self._found_published and not self.date: + d = data.strip() + if re.match(r"\d{4}-\d{2}-\d{2}", d): + self.date = d + + parser = CranParser() + parser.feed(page_html) + # Clean trailing slashes or .git from GitHub URL + gh = parser.github_url.rstrip("/") + if gh.endswith(".git"): + gh = gh[:-4] + return parser.date, gh + except Exception as e: + print(f"CRAN ERROR {url}: {e}") + return "", "" + + +def get_pypi_last_updated(url): + """Fetch the last release date from PyPI JSON API.""" + try: + # Extract package name from URL like https://pypi.org/project/tushare/ + m = re.search(r"pypi\.org/project/([\w.-]+)", url) or re.search( + r"pypi\.python\.org/pypi/([\w.-]+)", url + ) + if not m: + return "" + pkg = m.group(1).rstrip("/") + api_url = f"https://pypi.org/pypi/{pkg}/json" + with urlopen(api_url, timeout=10) as resp: + data = json.loads(resp.read().decode("utf-8")) + + releases = data.get("releases", {}) + if not releases: + return "" + + # Find the latest release with an upload time + for version in sorted(releases.keys(), reverse=True): + release_data = releases[version] + if release_data: + upload_time = release_data[0].get("upload_time_iso_8601") + if upload_time: + return upload_time.split("T")[0] + return "" + except Exception as e: + print(f"PYPI ERROR {url}: {e}") + return "" + + +def slugify(text): + """Convert text to lowercase hyphen-separated slug.""" + text = text.lower().strip() + text = re.sub(r"[&/]+", "-", text) + text = re.sub(r"[^\w\s-]", "", text) + text = re.sub(r"[\s_]+", "-", text) + text = re.sub(r"-+", "-", text) + return text.strip("-") + + +def get_repo_info(repo): + """Fetch last commit date and star count from GitHub.""" try: if repo: r = g.get_repo(repo) cs = r.get_commits() - return cs[0].commit.author.date.strftime("%Y-%m-%d") + last_commit = cs[0].commit.author.date.strftime("%Y-%m-%d") + stars = r.stargazers_count + return last_commit, stars else: - return "" - except: + return "", 0 + except Exception: print("ERROR " + repo) - return "error" + return "error", 0 class Project(Thread): - def __init__(self, match, section): + def __init__(self, match, language, category, section_path): super().__init__() self._match = match self.regs = None - self._section = section + self._language = language + self._category = category + self._section_path = section_path def run(self): m = self._match @@ -65,17 +179,46 @@ class Project(Thread): github_url = primary_url is_cran = "cran.r-project.org" in primary_url + is_pypi = "pypi.org" in primary_url or "pypi.python.org" in primary_url + is_commercial = self._language == "Commercial & Proprietary Services" + + # For CRAN projects, scrape the CRAN page for GitHub URL and published date + cran_date = "" + if is_cran: + cran_date, cran_github = get_cran_info(primary_url) + if cran_github and not github_url: + github_url = cran_github + repo = extract_repo(github_url) - print(repo) - last_commit = get_last_commit(repo) + print(repo or primary_url) + last_commit, stars = get_repo_info(repo) + + # Fallback: use CRAN/PyPI dates when no GitHub data + if not last_commit or last_commit == "error": + if is_cran and cran_date: + last_commit = cran_date + elif is_pypi: + pypi_date = get_pypi_last_updated(primary_url) + if pypi_date: + last_commit = pypi_date + + # Build section slug from category or language + section_slug = slugify(self._category or self._language) + self.regs = dict( project=m.group(1), - section=self._section, + language=self._language, + category=self._category, + section=self._section_path, + section_slug=section_slug, last_commit=last_commit, + stars=stars, url=primary_url, description=description, github=is_github or bool(github_url), cran=is_cran, + pypi=is_pypi, + commercial=is_commercial, repo=repo, ) @@ -85,26 +228,42 @@ projects = [] with open("README.md", "r", encoding="utf8") as f: ret = re.compile(r"^(#+) (.*)$") rex = re.compile(r"^\s*- \[(.*)\]\((.*)\) - (.*)$") + re_badge = re.compile(r"\s*!\[[^\]]*\]\([^)]*\)\s*") m_titles = [] last_head_level = 0 + current_language = "" + current_category = "" for line in f: + line = re_badge.sub(" ", line) m = rex.match(line) if m: - p = Project(m, " > ".join(m_titles[1:])) + p = Project( + m, + current_language, + current_category, + " > ".join(m_titles[1:]), + ) p.start() projects.append(p) else: m = ret.match(line) if m: hrs = m.group(1) + title = m.group(2) if len(hrs) > last_head_level: - m_titles.append(m.group(2)) + m_titles.append(title) else: for n in range(last_head_level - len(hrs) + 1): m_titles.pop() - m_titles.append(m.group(2)) + m_titles.append(title) last_head_level = len(hrs) + if len(hrs) == 2: + current_language = title + current_category = "" + elif len(hrs) == 3: + current_category = title + while True: checks = [not p.is_alive() for p in projects] if all(checks): @@ -113,4 +272,3 @@ while True: projects = [p.regs for p in projects] df = pd.DataFrame(projects) df.to_csv("site/projects.csv", index=False) -# df.to_markdown('projects.md', index=False) diff --git a/poetry.lock b/poetry.lock deleted file mode 100644 index 2e59ff5..0000000 --- a/poetry.lock +++ /dev/null @@ -1,882 +0,0 @@ -# This file is automatically @generated by Poetry 2.2.1 and should not be changed by hand. - -[[package]] -name = "certifi" -version = "2026.1.4" -description = "Python package for providing Mozilla's CA Bundle." -optional = false -python-versions = ">=3.7" -groups = ["main"] -files = [ - {file = "certifi-2026.1.4-py3-none-any.whl", hash = "sha256:9943707519e4add1115f44c2bc244f782c0249876bf51b6599fee1ffbedd685c"}, - {file = "certifi-2026.1.4.tar.gz", hash = "sha256:ac726dd470482006e014ad384921ed6438c457018f4b3d204aea4281258b2120"}, -] - -[[package]] -name = "cffi" -version = "2.0.0" -description = "Foreign Function Interface for Python calling C code." -optional = false -python-versions = ">=3.9" -groups = ["main"] -markers = "platform_python_implementation != \"PyPy\"" -files = [ - {file = "cffi-2.0.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44"}, - {file = "cffi-2.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49"}, - {file = "cffi-2.0.0-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c"}, - {file = "cffi-2.0.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb"}, - {file = "cffi-2.0.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0"}, - {file = "cffi-2.0.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4"}, - {file = "cffi-2.0.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453"}, - {file = "cffi-2.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495"}, - {file = "cffi-2.0.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5"}, - {file = "cffi-2.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb"}, - {file = "cffi-2.0.0-cp310-cp310-win32.whl", hash = "sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a"}, - {file = "cffi-2.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739"}, - {file = "cffi-2.0.0-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe"}, - {file = "cffi-2.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c"}, - {file = "cffi-2.0.0-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92"}, - {file = "cffi-2.0.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93"}, - {file = "cffi-2.0.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5"}, - {file = "cffi-2.0.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664"}, - {file = "cffi-2.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26"}, - {file = "cffi-2.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9"}, - {file = "cffi-2.0.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414"}, - {file = "cffi-2.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743"}, - {file = "cffi-2.0.0-cp311-cp311-win32.whl", hash = "sha256:c649e3a33450ec82378822b3dad03cc228b8f5963c0c12fc3b1e0ab940f768a5"}, - {file = "cffi-2.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5"}, - {file = "cffi-2.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:c6638687455baf640e37344fe26d37c404db8b80d037c3d29f58fe8d1c3b194d"}, - {file = "cffi-2.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d"}, - {file = "cffi-2.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c"}, - {file = "cffi-2.0.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe"}, - {file = "cffi-2.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062"}, - {file = "cffi-2.0.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e"}, - {file = "cffi-2.0.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037"}, - {file = "cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba"}, - {file = "cffi-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94"}, - {file = "cffi-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187"}, - {file = "cffi-2.0.0-cp312-cp312-win32.whl", hash = "sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18"}, - {file = "cffi-2.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5"}, - {file = "cffi-2.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6"}, - {file = "cffi-2.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb"}, - {file = "cffi-2.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca"}, - {file = "cffi-2.0.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b"}, - {file = "cffi-2.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b"}, - {file = "cffi-2.0.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2"}, - {file = "cffi-2.0.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3"}, - {file = "cffi-2.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26"}, - {file = "cffi-2.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c"}, - {file = "cffi-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b"}, - {file = "cffi-2.0.0-cp313-cp313-win32.whl", hash = "sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27"}, - {file = "cffi-2.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75"}, - {file = "cffi-2.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91"}, - {file = "cffi-2.0.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5"}, - {file = "cffi-2.0.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13"}, - {file = "cffi-2.0.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b"}, - {file = "cffi-2.0.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c"}, - {file = "cffi-2.0.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef"}, - {file = "cffi-2.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775"}, - {file = "cffi-2.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205"}, - {file = "cffi-2.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1"}, - {file = "cffi-2.0.0-cp314-cp314-win32.whl", hash = "sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f"}, - {file = "cffi-2.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25"}, - {file = "cffi-2.0.0-cp314-cp314-win_arm64.whl", hash = "sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad"}, - {file = "cffi-2.0.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9"}, - {file = "cffi-2.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d"}, - {file = "cffi-2.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c"}, - {file = "cffi-2.0.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8"}, - {file = "cffi-2.0.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc"}, - {file = "cffi-2.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592"}, - {file = "cffi-2.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512"}, - {file = "cffi-2.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4"}, - {file = "cffi-2.0.0-cp314-cp314t-win32.whl", hash = "sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e"}, - {file = "cffi-2.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6"}, - {file = "cffi-2.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9"}, - {file = "cffi-2.0.0-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:fe562eb1a64e67dd297ccc4f5addea2501664954f2692b69a76449ec7913ecbf"}, - {file = "cffi-2.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:de8dad4425a6ca6e4e5e297b27b5c824ecc7581910bf9aee86cb6835e6812aa7"}, - {file = "cffi-2.0.0-cp39-cp39-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:4647afc2f90d1ddd33441e5b0e85b16b12ddec4fca55f0d9671fef036ecca27c"}, - {file = "cffi-2.0.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3f4d46d8b35698056ec29bca21546e1551a205058ae1a181d871e278b0b28165"}, - {file = "cffi-2.0.0-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:e6e73b9e02893c764e7e8d5bb5ce277f1a009cd5243f8228f75f842bf937c534"}, - {file = "cffi-2.0.0-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:cb527a79772e5ef98fb1d700678fe031e353e765d1ca2d409c92263c6d43e09f"}, - {file = "cffi-2.0.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:61d028e90346df14fedc3d1e5441df818d095f3b87d286825dfcbd6459b7ef63"}, - {file = "cffi-2.0.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:0f6084a0ea23d05d20c3edcda20c3d006f9b6f3fefeac38f59262e10cef47ee2"}, - {file = "cffi-2.0.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:1cd13c99ce269b3ed80b417dcd591415d3372bcac067009b6e0f59c7d4015e65"}, - {file = "cffi-2.0.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:89472c9762729b5ae1ad974b777416bfda4ac5642423fa93bd57a09204712322"}, - {file = "cffi-2.0.0-cp39-cp39-win32.whl", hash = "sha256:2081580ebb843f759b9f617314a24ed5738c51d2aee65d31e02f6f7a2b97707a"}, - {file = "cffi-2.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:b882b3df248017dba09d6b16defe9b5c407fe32fc7c65a9c69798e6175601be9"}, - {file = "cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529"}, -] - -[package.dependencies] -pycparser = {version = "*", markers = "implementation_name != \"PyPy\""} - -[[package]] -name = "charset-normalizer" -version = "3.4.4" -description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -optional = false -python-versions = ">=3.7" -groups = ["main"] -files = [ - {file = "charset_normalizer-3.4.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e824f1492727fa856dd6eda4f7cee25f8518a12f3c4a56a74e8095695089cf6d"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4bd5d4137d500351a30687c2d3971758aac9a19208fc110ccb9d7188fbe709e8"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:027f6de494925c0ab2a55eab46ae5129951638a49a34d87f4c3eda90f696b4ad"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f820802628d2694cb7e56db99213f930856014862f3fd943d290ea8438d07ca8"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:798d75d81754988d2565bff1b97ba5a44411867c0cf32b77a7e8f8d84796b10d"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d1bb833febdff5c8927f922386db610b49db6e0d4f4ee29601d71e7c2694313"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:9cd98cdc06614a2f768d2b7286d66805f94c48cde050acdbbb7db2600ab3197e"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:077fbb858e903c73f6c9db43374fd213b0b6a778106bc7032446a8e8b5b38b93"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:244bfb999c71b35de57821b8ea746b24e863398194a4014e4c76adc2bbdfeff0"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:64b55f9dce520635f018f907ff1b0df1fdc31f2795a922fb49dd14fbcdf48c84"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:faa3a41b2b66b6e50f84ae4a68c64fcd0c44355741c6374813a800cd6695db9e"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:6515f3182dbe4ea06ced2d9e8666d97b46ef4c75e326b79bb624110f122551db"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:cc00f04ed596e9dc0da42ed17ac5e596c6ccba999ba6bd92b0e0aef2f170f2d6"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-win32.whl", hash = "sha256:f34be2938726fc13801220747472850852fe6b1ea75869a048d6f896838c896f"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-win_amd64.whl", hash = "sha256:a61900df84c667873b292c3de315a786dd8dac506704dea57bc957bd31e22c7d"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-win_arm64.whl", hash = "sha256:cead0978fc57397645f12578bfd2d5ea9138ea0fac82b2f63f7f7c6877986a69"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6e1fcf0720908f200cd21aa4e6750a48ff6ce4afe7ff5a79a90d5ed8a08296f8"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f819d5fe9234f9f82d75bdfa9aef3a3d72c4d24a6e57aeaebba32a704553aa0"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a59cb51917aa591b1c4e6a43c132f0cdc3c76dbad6155df4e28ee626cc77a0a3"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8ef3c867360f88ac904fd3f5e1f902f13307af9052646963ee08ff4f131adafc"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d9e45d7faa48ee908174d8fe84854479ef838fc6a705c9315372eacbc2f02897"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:840c25fb618a231545cbab0564a799f101b63b9901f2569faecd6b222ac72381"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ca5862d5b3928c4940729dacc329aa9102900382fea192fc5e52eb69d6093815"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d9c7f57c3d666a53421049053eaacdd14bbd0a528e2186fcb2e672effd053bb0"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:277e970e750505ed74c832b4bf75dac7476262ee2a013f5574dd49075879e161"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:31fd66405eaf47bb62e8cd575dc621c56c668f27d46a61d975a249930dd5e2a4"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:0d3d8f15c07f86e9ff82319b3d9ef6f4bf907608f53fe9d92b28ea9ae3d1fd89"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:9f7fcd74d410a36883701fafa2482a6af2ff5ba96b9a620e9e0721e28ead5569"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ebf3e58c7ec8a8bed6d66a75d7fb37b55e5015b03ceae72a8e7c74495551e224"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-win32.whl", hash = "sha256:eecbc200c7fd5ddb9a7f16c7decb07b566c29fa2161a16cf67b8d068bd21690a"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:5ae497466c7901d54b639cf42d5b8c1b6a4fead55215500d2f486d34db48d016"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-win_arm64.whl", hash = "sha256:65e2befcd84bc6f37095f5961e68a6f077bf44946771354a28ad434c2cce0ae1"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0a98e6759f854bd25a58a73fa88833fba3b7c491169f86ce1180c948ab3fd394"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b5b290ccc2a263e8d185130284f8501e3e36c5e02750fc6b6bdeb2e9e96f1e25"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:74bb723680f9f7a6234dcf67aea57e708ec1fbdf5699fb91dfd6f511b0a320ef"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f1e34719c6ed0b92f418c7c780480b26b5d9c50349e9a9af7d76bf757530350d"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2437418e20515acec67d86e12bf70056a33abdacb5cb1655042f6538d6b085a8"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:11d694519d7f29d6cd09f6ac70028dba10f92f6cdd059096db198c283794ac86"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ac1c4a689edcc530fc9d9aa11f5774b9e2f33f9a0c6a57864e90908f5208d30a"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:21d142cc6c0ec30d2efee5068ca36c128a30b0f2c53c1c07bd78cb6bc1d3be5f"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:5dbe56a36425d26d6cfb40ce79c314a2e4dd6211d51d6d2191c00bed34f354cc"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5bfbb1b9acf3334612667b61bd3002196fe2a1eb4dd74d247e0f2a4d50ec9bbf"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:d055ec1e26e441f6187acf818b73564e6e6282709e9bcb5b63f5b23068356a15"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:af2d8c67d8e573d6de5bc30cdb27e9b95e49115cd9baad5ddbd1a6207aaa82a9"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:780236ac706e66881f3b7f2f32dfe90507a09e67d1d454c762cf642e6e1586e0"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-win32.whl", hash = "sha256:5833d2c39d8896e4e19b689ffc198f08ea58116bee26dea51e362ecc7cd3ed26"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-win_amd64.whl", hash = "sha256:a79cfe37875f822425b89a82333404539ae63dbdddf97f84dcbc3d339aae9525"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-win_arm64.whl", hash = "sha256:376bec83a63b8021bb5c8ea75e21c4ccb86e7e45ca4eb81146091b56599b80c3"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e1f185f86a6f3403aa2420e815904c67b2f9ebc443f045edd0de921108345794"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b39f987ae8ccdf0d2642338faf2abb1862340facc796048b604ef14919e55ed"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3162d5d8ce1bb98dd51af660f2121c55d0fa541b46dff7bb9b9f86ea1d87de72"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:81d5eb2a312700f4ecaa977a8235b634ce853200e828fbadf3a9c50bab278328"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5bd2293095d766545ec1a8f612559f6b40abc0eb18bb2f5d1171872d34036ede"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a8a8b89589086a25749f471e6a900d3f662d1d3b6e2e59dcecf787b1cc3a1894"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc7637e2f80d8530ee4a78e878bce464f70087ce73cf7c1caf142416923b98f1"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f8bf04158c6b607d747e93949aa60618b61312fe647a6369f88ce2ff16043490"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:554af85e960429cf30784dd47447d5125aaa3b99a6f0683589dbd27e2f45da44"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:74018750915ee7ad843a774364e13a3db91682f26142baddf775342c3f5b1133"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:c0463276121fdee9c49b98908b3a89c39be45d86d1dbaa22957e38f6321d4ce3"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:362d61fd13843997c1c446760ef36f240cf81d3ebf74ac62652aebaf7838561e"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9a26f18905b8dd5d685d6d07b0cdf98a79f3c7a918906af7cc143ea2e164c8bc"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-win32.whl", hash = "sha256:9b35f4c90079ff2e2edc5b26c0c77925e5d2d255c42c74fdb70fb49b172726ac"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-win_amd64.whl", hash = "sha256:b435cba5f4f750aa6c0a0d92c541fb79f69a387c91e61f1795227e4ed9cece14"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-win_arm64.whl", hash = "sha256:542d2cee80be6f80247095cc36c418f7bddd14f4a6de45af91dfad36d817bba2"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:da3326d9e65ef63a817ecbcc0df6e94463713b754fe293eaa03da99befb9a5bd"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8af65f14dc14a79b924524b1e7fffe304517b2bff5a58bf64f30b98bbc5079eb"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:74664978bb272435107de04e36db5a9735e78232b85b77d45cfb38f758efd33e"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:752944c7ffbfdd10c074dc58ec2d5a8a4cd9493b314d367c14d24c17684ddd14"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d1f13550535ad8cff21b8d757a3257963e951d96e20ec82ab44bc64aeb62a191"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ecaae4149d99b1c9e7b88bb03e3221956f68fd6d50be2ef061b2381b61d20838"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:cb6254dc36b47a990e59e1068afacdcd02958bdcce30bb50cc1700a8b9d624a6"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c8ae8a0f02f57a6e61203a31428fa1d677cbe50c93622b4149d5c0f319c1d19e"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:47cc91b2f4dd2833fddaedd2893006b0106129d4b94fdb6af1f4ce5a9965577c"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:82004af6c302b5d3ab2cfc4cc5f29db16123b1a8417f2e25f9066f91d4411090"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:2b7d8f6c26245217bd2ad053761201e9f9680f8ce52f0fcd8d0755aeae5b2152"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:799a7a5e4fb2d5898c60b640fd4981d6a25f1c11790935a44ce38c54e985f828"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:99ae2cffebb06e6c22bdc25801d7b30f503cc87dbd283479e7b606f70aff57ec"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-win32.whl", hash = "sha256:f9d332f8c2a2fcbffe1378594431458ddbef721c1769d78e2cbc06280d8155f9"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-win_amd64.whl", hash = "sha256:8a6562c3700cce886c5be75ade4a5db4214fda19fede41d9792d100288d8f94c"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-win_arm64.whl", hash = "sha256:de00632ca48df9daf77a2c65a484531649261ec9f25489917f09e455cb09ddb2"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ce8a0633f41a967713a59c4139d29110c07e826d131a316b50ce11b1d79b4f84"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eaabd426fe94daf8fd157c32e571c85cb12e66692f15516a83a03264b08d06c3"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c4ef880e27901b6cc782f1b95f82da9313c0eb95c3af699103088fa0ac3ce9ac"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2aaba3b0819274cc41757a1da876f810a3e4d7b6eb25699253a4effef9e8e4af"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:778d2e08eda00f4256d7f672ca9fef386071c9202f5e4607920b86d7803387f2"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f155a433c2ec037d4e8df17d18922c3a0d9b3232a396690f17175d2946f0218d"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a8bf8d0f749c5757af2142fe7903a9df1d2e8aa3841559b2bad34b08d0e2bcf3"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:194f08cbb32dc406d6e1aea671a68be0823673db2832b38405deba2fb0d88f63"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_armv7l.whl", hash = "sha256:6aee717dcfead04c6eb1ce3bd29ac1e22663cdea57f943c87d1eab9a025438d7"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:cd4b7ca9984e5e7985c12bc60a6f173f3c958eae74f3ef6624bb6b26e2abbae4"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_riscv64.whl", hash = "sha256:b7cf1017d601aa35e6bb650b6ad28652c9cd78ee6caff19f3c28d03e1c80acbf"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:e912091979546adf63357d7e2ccff9b44f026c075aeaf25a52d0e95ad2281074"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:5cb4d72eea50c8868f5288b7f7f33ed276118325c1dfd3957089f6b519e1382a"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-win32.whl", hash = "sha256:837c2ce8c5a65a2035be9b3569c684358dfbf109fd3b6969630a87535495ceaa"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-win_amd64.whl", hash = "sha256:44c2a8734b333e0578090c4cd6b16f275e07aa6614ca8715e6c038e865e70576"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a9768c477b9d7bd54bc0c86dbaebdec6f03306675526c9927c0e8a04e8f94af9"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1bee1e43c28aa63cb16e5c14e582580546b08e535299b8b6158a7c9c768a1f3d"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:fd44c878ea55ba351104cb93cc85e74916eb8fa440ca7903e57575e97394f608"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0f04b14ffe5fdc8c4933862d8306109a2c51e0704acfa35d51598eb45a1e89fc"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:cd09d08005f958f370f539f186d10aec3377d55b9eeb0d796025d4886119d76e"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4fe7859a4e3e8457458e2ff592f15ccb02f3da787fcd31e0183879c3ad4692a1"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fa09f53c465e532f4d3db095e0c55b615f010ad81803d383195b6b5ca6cbf5f3"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7fa17817dc5625de8a027cb8b26d9fefa3ea28c8253929b8d6649e705d2835b6"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:5947809c8a2417be3267efc979c47d76a079758166f7d43ef5ae8e9f92751f88"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:4902828217069c3c5c71094537a8e623f5d097858ac6ca8252f7b4d10b7560f1"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:7c308f7e26e4363d79df40ca5b2be1c6ba9f02bdbccfed5abddb7859a6ce72cf"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:2c9d3c380143a1fedbff95a312aa798578371eb29da42106a29019368a475318"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:cb01158d8b88ee68f15949894ccc6712278243d95f344770fa7593fa2d94410c"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-win32.whl", hash = "sha256:2677acec1a2f8ef614c6888b5b4ae4060cc184174a938ed4e8ef690e15d3e505"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-win_amd64.whl", hash = "sha256:f8e160feb2aed042cd657a72acc0b481212ed28b1b9a95c0cee1621b524e1966"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-win_arm64.whl", hash = "sha256:b5d84d37db046c5ca74ee7bb47dd6cbc13f80665fdde3e8040bdd3fb015ecb50"}, - {file = "charset_normalizer-3.4.4-py3-none-any.whl", hash = "sha256:7a32c560861a02ff789ad905a2fe94e3f840803362c84fecf1851cb4cf3dc37f"}, - {file = "charset_normalizer-3.4.4.tar.gz", hash = "sha256:94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a"}, -] - -[[package]] -name = "cryptography" -version = "46.0.3" -description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." -optional = false -python-versions = "!=3.9.0,!=3.9.1,>=3.8" -groups = ["main"] -files = [ - {file = "cryptography-46.0.3-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:109d4ddfadf17e8e7779c39f9b18111a09efb969a301a31e987416a0191ed93a"}, - {file = "cryptography-46.0.3-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:09859af8466b69bc3c27bdf4f5d84a665e0f7ab5088412e9e2ec49758eca5cbc"}, - {file = "cryptography-46.0.3-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:01ca9ff2885f3acc98c29f1860552e37f6d7c7d013d7334ff2a9de43a449315d"}, - {file = "cryptography-46.0.3-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:6eae65d4c3d33da080cff9c4ab1f711b15c1d9760809dad6ea763f3812d254cb"}, - {file = "cryptography-46.0.3-cp311-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e5bf0ed4490068a2e72ac03d786693adeb909981cc596425d09032d372bcc849"}, - {file = "cryptography-46.0.3-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:5ecfccd2329e37e9b7112a888e76d9feca2347f12f37918facbb893d7bb88ee8"}, - {file = "cryptography-46.0.3-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:a2c0cd47381a3229c403062f764160d57d4d175e022c1df84e168c6251a22eec"}, - {file = "cryptography-46.0.3-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:549e234ff32571b1f4076ac269fcce7a808d3bf98b76c8dd560e42dbc66d7d91"}, - {file = "cryptography-46.0.3-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:c0a7bb1a68a5d3471880e264621346c48665b3bf1c3759d682fc0864c540bd9e"}, - {file = "cryptography-46.0.3-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:10b01676fc208c3e6feeb25a8b83d81767e8059e1fe86e1dc62d10a3018fa926"}, - {file = "cryptography-46.0.3-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:0abf1ffd6e57c67e92af68330d05760b7b7efb243aab8377e583284dbab72c71"}, - {file = "cryptography-46.0.3-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a04bee9ab6a4da801eb9b51f1b708a1b5b5c9eb48c03f74198464c66f0d344ac"}, - {file = "cryptography-46.0.3-cp311-abi3-win32.whl", hash = "sha256:f260d0d41e9b4da1ed1e0f1ce571f97fe370b152ab18778e9e8f67d6af432018"}, - {file = "cryptography-46.0.3-cp311-abi3-win_amd64.whl", hash = "sha256:a9a3008438615669153eb86b26b61e09993921ebdd75385ddd748702c5adfddb"}, - {file = "cryptography-46.0.3-cp311-abi3-win_arm64.whl", hash = "sha256:5d7f93296ee28f68447397bf5198428c9aeeab45705a55d53a6343455dcb2c3c"}, - {file = "cryptography-46.0.3-cp314-cp314t-macosx_10_9_universal2.whl", hash = "sha256:00a5e7e87938e5ff9ff5447ab086a5706a957137e6e433841e9d24f38a065217"}, - {file = "cryptography-46.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:c8daeb2d2174beb4575b77482320303f3d39b8e81153da4f0fb08eb5fe86a6c5"}, - {file = "cryptography-46.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:39b6755623145ad5eff1dab323f4eae2a32a77a7abef2c5089a04a3d04366715"}, - {file = "cryptography-46.0.3-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:db391fa7c66df6762ee3f00c95a89e6d428f4d60e7abc8328f4fe155b5ac6e54"}, - {file = "cryptography-46.0.3-cp314-cp314t-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:78a97cf6a8839a48c49271cdcbd5cf37ca2c1d6b7fdd86cc864f302b5e9bf459"}, - {file = "cryptography-46.0.3-cp314-cp314t-manylinux_2_28_ppc64le.whl", hash = "sha256:dfb781ff7eaa91a6f7fd41776ec37c5853c795d3b358d4896fdbb5df168af422"}, - {file = "cryptography-46.0.3-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:6f61efb26e76c45c4a227835ddeae96d83624fb0d29eb5df5b96e14ed1a0afb7"}, - {file = "cryptography-46.0.3-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:23b1a8f26e43f47ceb6d6a43115f33a5a37d57df4ea0ca295b780ae8546e8044"}, - {file = "cryptography-46.0.3-cp314-cp314t-manylinux_2_34_ppc64le.whl", hash = "sha256:b419ae593c86b87014b9be7396b385491ad7f320bde96826d0dd174459e54665"}, - {file = "cryptography-46.0.3-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:50fc3343ac490c6b08c0cf0d704e881d0d660be923fd3076db3e932007e726e3"}, - {file = "cryptography-46.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:22d7e97932f511d6b0b04f2bfd818d73dcd5928db509460aaf48384778eb6d20"}, - {file = "cryptography-46.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:d55f3dffadd674514ad19451161118fd010988540cee43d8bc20675e775925de"}, - {file = "cryptography-46.0.3-cp314-cp314t-win32.whl", hash = "sha256:8a6e050cb6164d3f830453754094c086ff2d0b2f3a897a1d9820f6139a1f0914"}, - {file = "cryptography-46.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:760f83faa07f8b64e9c33fc963d790a2edb24efb479e3520c14a45741cd9b2db"}, - {file = "cryptography-46.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:516ea134e703e9fe26bcd1277a4b59ad30586ea90c365a87781d7887a646fe21"}, - {file = "cryptography-46.0.3-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:cb3d760a6117f621261d662bccc8ef5bc32ca673e037c83fbe565324f5c46936"}, - {file = "cryptography-46.0.3-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:4b7387121ac7d15e550f5cb4a43aef2559ed759c35df7336c402bb8275ac9683"}, - {file = "cryptography-46.0.3-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:15ab9b093e8f09daab0f2159bb7e47532596075139dd74365da52ecc9cb46c5d"}, - {file = "cryptography-46.0.3-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:46acf53b40ea38f9c6c229599a4a13f0d46a6c3fa9ef19fc1a124d62e338dfa0"}, - {file = "cryptography-46.0.3-cp38-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:10ca84c4668d066a9878890047f03546f3ae0a6b8b39b697457b7757aaf18dbc"}, - {file = "cryptography-46.0.3-cp38-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:36e627112085bb3b81b19fed209c05ce2a52ee8b15d161b7c643a7d5a88491f3"}, - {file = "cryptography-46.0.3-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:1000713389b75c449a6e979ffc7dcc8ac90b437048766cef052d4d30b8220971"}, - {file = "cryptography-46.0.3-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:b02cf04496f6576afffef5ddd04a0cb7d49cf6be16a9059d793a30b035f6b6ac"}, - {file = "cryptography-46.0.3-cp38-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:71e842ec9bc7abf543b47cf86b9a743baa95f4677d22baa4c7d5c69e49e9bc04"}, - {file = "cryptography-46.0.3-cp38-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:402b58fc32614f00980b66d6e56a5b4118e6cb362ae8f3fda141ba4689bd4506"}, - {file = "cryptography-46.0.3-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:ef639cb3372f69ec44915fafcd6698b6cc78fbe0c2ea41be867f6ed612811963"}, - {file = "cryptography-46.0.3-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:3b51b8ca4f1c6453d8829e1eb7299499ca7f313900dd4d89a24b8b87c0a780d4"}, - {file = "cryptography-46.0.3-cp38-abi3-win32.whl", hash = "sha256:6276eb85ef938dc035d59b87c8a7dc559a232f954962520137529d77b18ff1df"}, - {file = "cryptography-46.0.3-cp38-abi3-win_amd64.whl", hash = "sha256:416260257577718c05135c55958b674000baef9a1c7d9e8f306ec60d71db850f"}, - {file = "cryptography-46.0.3-cp38-abi3-win_arm64.whl", hash = "sha256:d89c3468de4cdc4f08a57e214384d0471911a3830fcdaf7a8cc587e42a866372"}, - {file = "cryptography-46.0.3-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a23582810fedb8c0bc47524558fb6c56aac3fc252cb306072fd2815da2a47c32"}, - {file = "cryptography-46.0.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:e7aec276d68421f9574040c26e2a7c3771060bc0cff408bae1dcb19d3ab1e63c"}, - {file = "cryptography-46.0.3-pp311-pypy311_pp73-macosx_10_9_x86_64.whl", hash = "sha256:7ce938a99998ed3c8aa7e7272dca1a610401ede816d36d0693907d863b10d9ea"}, - {file = "cryptography-46.0.3-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:191bb60a7be5e6f54e30ba16fdfae78ad3a342a0599eb4193ba88e3f3d6e185b"}, - {file = "cryptography-46.0.3-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c70cc23f12726be8f8bc72e41d5065d77e4515efae3690326764ea1b07845cfb"}, - {file = "cryptography-46.0.3-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:9394673a9f4de09e28b5356e7fff97d778f8abad85c9d5ac4a4b7e25a0de7717"}, - {file = "cryptography-46.0.3-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:94cd0549accc38d1494e1f8de71eca837d0509d0d44bf11d158524b0e12cebf9"}, - {file = "cryptography-46.0.3-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:6b5063083824e5509fdba180721d55909ffacccc8adbec85268b48439423d78c"}, - {file = "cryptography-46.0.3.tar.gz", hash = "sha256:a8b17438104fed022ce745b362294d9ce35b4c2e45c1d958ad4a4b019285f4a1"}, -] - -[package.dependencies] -cffi = {version = ">=2.0.0", markers = "python_full_version >= \"3.9.0\" and platform_python_implementation != \"PyPy\""} - -[package.extras] -docs = ["sphinx (>=5.3.0)", "sphinx-inline-tabs", "sphinx-rtd-theme (>=3.0.0)"] -docstest = ["pyenchant (>=3)", "readme-renderer (>=30.0)", "sphinxcontrib-spelling (>=7.3.1)"] -nox = ["nox[uv] (>=2024.4.15)"] -pep8test = ["check-sdist", "click (>=8.0.1)", "mypy (>=1.14)", "ruff (>=0.11.11)"] -sdist = ["build (>=1.0.0)"] -ssh = ["bcrypt (>=3.1.5)"] -test = ["certifi (>=2024)", "cryptography-vectors (==46.0.3)", "pretend (>=0.7)", "pytest (>=7.4.0)", "pytest-benchmark (>=4.0)", "pytest-cov (>=2.10.1)", "pytest-xdist (>=3.5.0)"] -test-randomorder = ["pytest-randomly"] - -[[package]] -name = "idna" -version = "3.11" -description = "Internationalized Domain Names in Applications (IDNA)" -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea"}, - {file = "idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902"}, -] - -[package.extras] -all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] - -[[package]] -name = "librt" -version = "0.7.7" -description = "Mypyc runtime library" -optional = false -python-versions = ">=3.9" -groups = ["main"] -markers = "platform_python_implementation != \"PyPy\"" -files = [ - {file = "librt-0.7.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e4836c5645f40fbdc275e5670819bde5ab5f2e882290d304e3c6ddab1576a6d0"}, - {file = "librt-0.7.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6ae8aec43117a645a31e5f60e9e3a0797492e747823b9bda6972d521b436b4e8"}, - {file = "librt-0.7.7-cp310-cp310-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:aea05f701ccd2a76b34f0daf47ca5068176ff553510b614770c90d76ac88df06"}, - {file = "librt-0.7.7-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7b16ccaeff0ed4355dfb76fe1ea7a5d6d03b5ad27f295f77ee0557bc20a72495"}, - {file = "librt-0.7.7-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c48c7e150c095d5e3cea7452347ba26094be905d6099d24f9319a8b475fcd3e0"}, - {file = "librt-0.7.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4dcee2f921a8632636d1c37f1bbdb8841d15666d119aa61e5399c5268e7ce02e"}, - {file = "librt-0.7.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:14ef0f4ac3728ffd85bfc58e2f2f48fb4ef4fa871876f13a73a7381d10a9f77c"}, - {file = "librt-0.7.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e4ab69fa37f8090f2d971a5d2bc606c7401170dbdae083c393d6cbf439cb45b8"}, - {file = "librt-0.7.7-cp310-cp310-win32.whl", hash = "sha256:4bf3cc46d553693382d2abf5f5bd493d71bb0f50a7c0beab18aa13a5545c8900"}, - {file = "librt-0.7.7-cp310-cp310-win_amd64.whl", hash = "sha256:f0c8fe5aeadd8a0e5b0598f8a6ee3533135ca50fd3f20f130f9d72baf5c6ac58"}, - {file = "librt-0.7.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a487b71fbf8a9edb72a8c7a456dda0184642d99cd007bc819c0b7ab93676a8ee"}, - {file = "librt-0.7.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f4d4efb218264ecf0f8516196c9e2d1a0679d9fb3bb15df1155a35220062eba8"}, - {file = "librt-0.7.7-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:b8bb331aad734b059c4b450cd0a225652f16889e286b2345af5e2c3c625c3d85"}, - {file = "librt-0.7.7-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:467dbd7443bda08338fc8ad701ed38cef48194017554f4c798b0a237904b3f99"}, - {file = "librt-0.7.7-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:50d1d1ee813d2d1a3baf2873634ba506b263032418d16287c92ec1cc9c1a00cb"}, - {file = "librt-0.7.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c7e5070cf3ec92d98f57574da0224f8c73faf1ddd6d8afa0b8c9f6e86997bc74"}, - {file = "librt-0.7.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:bdb9f3d865b2dafe7f9ad7f30ef563c80d0ddd2fdc8cc9b8e4f242f475e34d75"}, - {file = "librt-0.7.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:8185c8497d45164e256376f9da5aed2bb26ff636c798c9dabe313b90e9f25b28"}, - {file = "librt-0.7.7-cp311-cp311-win32.whl", hash = "sha256:44d63ce643f34a903f09ff7ca355aae019a3730c7afd6a3c037d569beeb5d151"}, - {file = "librt-0.7.7-cp311-cp311-win_amd64.whl", hash = "sha256:7d13cc340b3b82134f8038a2bfe7137093693dcad8ba5773da18f95ad6b77a8a"}, - {file = "librt-0.7.7-cp311-cp311-win_arm64.whl", hash = "sha256:983de36b5a83fe9222f4f7dcd071f9b1ac6f3f17c0af0238dadfb8229588f890"}, - {file = "librt-0.7.7-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2a85a1fc4ed11ea0eb0a632459ce004a2d14afc085a50ae3463cd3dfe1ce43fc"}, - {file = "librt-0.7.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c87654e29a35938baead1c4559858f346f4a2a7588574a14d784f300ffba0efd"}, - {file = "librt-0.7.7-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:c9faaebb1c6212c20afd8043cd6ed9de0a47d77f91a6b5b48f4e46ed470703fe"}, - {file = "librt-0.7.7-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1908c3e5a5ef86b23391448b47759298f87f997c3bd153a770828f58c2bb4630"}, - {file = "librt-0.7.7-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dbc4900e95a98fc0729523be9d93a8fedebb026f32ed9ffc08acd82e3e181503"}, - {file = "librt-0.7.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a7ea4e1fbd253e5c68ea0fe63d08577f9d288a73f17d82f652ebc61fa48d878d"}, - {file = "librt-0.7.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:ef7699b7a5a244b1119f85c5bbc13f152cd38240cbb2baa19b769433bae98e50"}, - {file = "librt-0.7.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:955c62571de0b181d9e9e0a0303c8bc90d47670a5eff54cf71bf5da61d1899cf"}, - {file = "librt-0.7.7-cp312-cp312-win32.whl", hash = "sha256:1bcd79be209313b270b0e1a51c67ae1af28adad0e0c7e84c3ad4b5cb57aaa75b"}, - {file = "librt-0.7.7-cp312-cp312-win_amd64.whl", hash = "sha256:4353ee891a1834567e0302d4bd5e60f531912179578c36f3d0430f8c5e16b456"}, - {file = "librt-0.7.7-cp312-cp312-win_arm64.whl", hash = "sha256:a76f1d679beccccdf8c1958e732a1dfcd6e749f8821ee59d7bec009ac308c029"}, - {file = "librt-0.7.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8f4a0b0a3c86ba9193a8e23bb18f100d647bf192390ae195d84dfa0a10fb6244"}, - {file = "librt-0.7.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5335890fea9f9e6c4fdf8683061b9ccdcbe47c6dc03ab8e9b68c10acf78be78d"}, - {file = "librt-0.7.7-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:9b4346b1225be26def3ccc6c965751c74868f0578cbcba293c8ae9168483d811"}, - {file = "librt-0.7.7-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a10b8eebdaca6e9fdbaf88b5aefc0e324b763a5f40b1266532590d5afb268a4c"}, - {file = "librt-0.7.7-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:067be973d90d9e319e6eb4ee2a9b9307f0ecd648b8a9002fa237289a4a07a9e7"}, - {file = "librt-0.7.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:23d2299ed007812cccc1ecef018db7d922733382561230de1f3954db28433977"}, - {file = "librt-0.7.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:6b6f8ea465524aa4c7420c7cc4ca7d46fe00981de8debc67b1cc2e9957bb5b9d"}, - {file = "librt-0.7.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:f8df32a99cc46eb0ee90afd9ada113ae2cafe7e8d673686cf03ec53e49635439"}, - {file = "librt-0.7.7-cp313-cp313-win32.whl", hash = "sha256:86f86b3b785487c7760247bcdac0b11aa8bf13245a13ed05206286135877564b"}, - {file = "librt-0.7.7-cp313-cp313-win_amd64.whl", hash = "sha256:4862cb2c702b1f905c0503b72d9d4daf65a7fdf5a9e84560e563471e57a56949"}, - {file = "librt-0.7.7-cp313-cp313-win_arm64.whl", hash = "sha256:0996c83b1cb43c00e8c87835a284f9057bc647abd42b5871e5f941d30010c832"}, - {file = "librt-0.7.7-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:23daa1ab0512bafdd677eb1bfc9611d8ffbe2e328895671e64cb34166bc1b8c8"}, - {file = "librt-0.7.7-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:558a9e5a6f3cc1e20b3168fb1dc802d0d8fa40731f6e9932dcc52bbcfbd37111"}, - {file = "librt-0.7.7-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:2567cb48dc03e5b246927ab35cbb343376e24501260a9b5e30b8e255dca0d1d2"}, - {file = "librt-0.7.7-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6066c638cdf85ff92fc6f932d2d73c93a0e03492cdfa8778e6d58c489a3d7259"}, - {file = "librt-0.7.7-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a609849aca463074c17de9cda173c276eb8fee9e441053529e7b9e249dc8b8ee"}, - {file = "librt-0.7.7-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:add4e0a000858fe9bb39ed55f31085506a5c38363e6eb4a1e5943a10c2bfc3d1"}, - {file = "librt-0.7.7-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:a3bfe73a32bd0bdb9a87d586b05a23c0a1729205d79df66dee65bb2e40d671ba"}, - {file = "librt-0.7.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:0ecce0544d3db91a40f8b57ae26928c02130a997b540f908cefd4d279d6c5848"}, - {file = "librt-0.7.7-cp314-cp314-win32.whl", hash = "sha256:8f7a74cf3a80f0c3b0ec75b0c650b2f0a894a2cec57ef75f6f72c1e82cdac61d"}, - {file = "librt-0.7.7-cp314-cp314-win_amd64.whl", hash = "sha256:3d1fe2e8df3268dd6734dba33ededae72ad5c3a859b9577bc00b715759c5aaab"}, - {file = "librt-0.7.7-cp314-cp314-win_arm64.whl", hash = "sha256:2987cf827011907d3dfd109f1be0d61e173d68b1270107bb0e89f2fca7f2ed6b"}, - {file = "librt-0.7.7-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:8e92c8de62b40bfce91d5e12c6e8b15434da268979b1af1a6589463549d491e6"}, - {file = "librt-0.7.7-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f683dcd49e2494a7535e30f779aa1ad6e3732a019d80abe1309ea91ccd3230e3"}, - {file = "librt-0.7.7-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:9b15e5d17812d4d629ff576699954f74e2cc24a02a4fc401882dd94f81daba45"}, - {file = "librt-0.7.7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c084841b879c4d9b9fa34e5d5263994f21aea7fd9c6add29194dbb41a6210536"}, - {file = "librt-0.7.7-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:10c8fb9966f84737115513fecbaf257f9553d067a7dd45a69c2c7e5339e6a8dc"}, - {file = "librt-0.7.7-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:9b5fb1ecb2c35362eab2dbd354fd1efa5a8440d3e73a68be11921042a0edc0ff"}, - {file = "librt-0.7.7-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:d1454899909d63cc9199a89fcc4f81bdd9004aef577d4ffc022e600c412d57f3"}, - {file = "librt-0.7.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:7ef28f2e7a016b29792fe0a2dd04dec75725b32a1264e390c366103f834a9c3a"}, - {file = "librt-0.7.7-cp314-cp314t-win32.whl", hash = "sha256:5e419e0db70991b6ba037b70c1d5bbe92b20ddf82f31ad01d77a347ed9781398"}, - {file = "librt-0.7.7-cp314-cp314t-win_amd64.whl", hash = "sha256:d6b7d93657332c817b8d674ef6bf1ab7796b4f7ce05e420fd45bd258a72ac804"}, - {file = "librt-0.7.7-cp314-cp314t-win_arm64.whl", hash = "sha256:142c2cd91794b79fd0ce113bd658993b7ede0fe93057668c2f98a45ca00b7e91"}, - {file = "librt-0.7.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c8ffe3431d98cc043a14e88b21288b5ec7ee12cb01260e94385887f285ef9389"}, - {file = "librt-0.7.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e40d20ae1722d6b8ea6acf4597e789604649dcd9c295eb7361a28225bc2e9e12"}, - {file = "librt-0.7.7-cp39-cp39-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:f2cb63c49bc96847c3bb8dca350970e4dcd19936f391cfdfd057dcb37c4fa97e"}, - {file = "librt-0.7.7-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8f2f8dcf5ab9f80fb970c6fd780b398efb2f50c1962485eb8d3ab07788595a48"}, - {file = "librt-0.7.7-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a1f5cc41a570269d1be7a676655875e3a53de4992a9fa38efb7983e97cf73d7c"}, - {file = "librt-0.7.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:ff1fb2dfef035549565a4124998fadcb7a3d4957131ddf004a56edeb029626b3"}, - {file = "librt-0.7.7-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:ab2a2a9cd7d044e1a11ca64a86ad3361d318176924bbe5152fbc69f99be20b8c"}, - {file = "librt-0.7.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:ad3fc2d859a709baf9dd9607bb72f599b1cfb8a39eafd41307d0c3c4766763cb"}, - {file = "librt-0.7.7-cp39-cp39-win32.whl", hash = "sha256:f83c971eb9d2358b6a18da51dc0ae00556ac7c73104dde16e9e14c15aaf685ca"}, - {file = "librt-0.7.7-cp39-cp39-win_amd64.whl", hash = "sha256:264720fc288c86039c091a4ad63419a5d7cabbf1c1c9933336a957ed2483e570"}, - {file = "librt-0.7.7.tar.gz", hash = "sha256:81d957b069fed1890953c3b9c3895c7689960f233eea9a1d9607f71ce7f00b2c"}, -] - -[[package]] -name = "mypy" -version = "1.19.1" -description = "Optional static typing for Python" -optional = false -python-versions = ">=3.9" -groups = ["main"] -files = [ - {file = "mypy-1.19.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5f05aa3d375b385734388e844bc01733bd33c644ab48e9684faa54e5389775ec"}, - {file = "mypy-1.19.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:022ea7279374af1a5d78dfcab853fe6a536eebfda4b59deab53cd21f6cd9f00b"}, - {file = "mypy-1.19.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee4c11e460685c3e0c64a4c5de82ae143622410950d6be863303a1c4ba0e36d6"}, - {file = "mypy-1.19.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:de759aafbae8763283b2ee5869c7255391fbc4de3ff171f8f030b5ec48381b74"}, - {file = "mypy-1.19.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ab43590f9cd5108f41aacf9fca31841142c786827a74ab7cc8a2eacb634e09a1"}, - {file = "mypy-1.19.1-cp310-cp310-win_amd64.whl", hash = "sha256:2899753e2f61e571b3971747e302d5f420c3fd09650e1951e99f823bc3089dac"}, - {file = "mypy-1.19.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d8dfc6ab58ca7dda47d9237349157500468e404b17213d44fc1cb77bce532288"}, - {file = "mypy-1.19.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e3f276d8493c3c97930e354b2595a44a21348b320d859fb4a2b9f66da9ed27ab"}, - {file = "mypy-1.19.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2abb24cf3f17864770d18d673c85235ba52456b36a06b6afc1e07c1fdcd3d0e6"}, - {file = "mypy-1.19.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a009ffa5a621762d0c926a078c2d639104becab69e79538a494bcccb62cc0331"}, - {file = "mypy-1.19.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f7cee03c9a2e2ee26ec07479f38ea9c884e301d42c6d43a19d20fb014e3ba925"}, - {file = "mypy-1.19.1-cp311-cp311-win_amd64.whl", hash = "sha256:4b84a7a18f41e167f7995200a1d07a4a6810e89d29859df936f1c3923d263042"}, - {file = "mypy-1.19.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:a8174a03289288c1f6c46d55cef02379b478bfbc8e358e02047487cad44c6ca1"}, - {file = "mypy-1.19.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ffcebe56eb09ff0c0885e750036a095e23793ba6c2e894e7e63f6d89ad51f22e"}, - {file = "mypy-1.19.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b64d987153888790bcdb03a6473d321820597ab8dd9243b27a92153c4fa50fd2"}, - {file = "mypy-1.19.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c35d298c2c4bba75feb2195655dfea8124d855dfd7343bf8b8c055421eaf0cf8"}, - {file = "mypy-1.19.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:34c81968774648ab5ac09c29a375fdede03ba253f8f8287847bd480782f73a6a"}, - {file = "mypy-1.19.1-cp312-cp312-win_amd64.whl", hash = "sha256:b10e7c2cd7870ba4ad9b2d8a6102eb5ffc1f16ca35e3de6bfa390c1113029d13"}, - {file = "mypy-1.19.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e3157c7594ff2ef1634ee058aafc56a82db665c9438fd41b390f3bde1ab12250"}, - {file = "mypy-1.19.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bdb12f69bcc02700c2b47e070238f42cb87f18c0bc1fc4cdb4fb2bc5fd7a3b8b"}, - {file = "mypy-1.19.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f859fb09d9583a985be9a493d5cfc5515b56b08f7447759a0c5deaf68d80506e"}, - {file = "mypy-1.19.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c9a6538e0415310aad77cb94004ca6482330fece18036b5f360b62c45814c4ef"}, - {file = "mypy-1.19.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:da4869fc5e7f62a88f3fe0b5c919d1d9f7ea3cef92d3689de2823fd27e40aa75"}, - {file = "mypy-1.19.1-cp313-cp313-win_amd64.whl", hash = "sha256:016f2246209095e8eda7538944daa1d60e1e8134d98983b9fc1e92c1fc0cb8dd"}, - {file = "mypy-1.19.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:06e6170bd5836770e8104c8fdd58e5e725cfeb309f0a6c681a811f557e97eac1"}, - {file = "mypy-1.19.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:804bd67b8054a85447c8954215a906d6eff9cabeabe493fb6334b24f4bfff718"}, - {file = "mypy-1.19.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:21761006a7f497cb0d4de3d8ef4ca70532256688b0523eee02baf9eec895e27b"}, - {file = "mypy-1.19.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:28902ee51f12e0f19e1e16fbe2f8f06b6637f482c459dd393efddd0ec7f82045"}, - {file = "mypy-1.19.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:481daf36a4c443332e2ae9c137dfee878fcea781a2e3f895d54bd3002a900957"}, - {file = "mypy-1.19.1-cp314-cp314-win_amd64.whl", hash = "sha256:8bb5c6f6d043655e055be9b542aa5f3bdd30e4f3589163e85f93f3640060509f"}, - {file = "mypy-1.19.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7bcfc336a03a1aaa26dfce9fff3e287a3ba99872a157561cbfcebe67c13308e3"}, - {file = "mypy-1.19.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b7951a701c07ea584c4fe327834b92a30825514c868b1f69c30445093fdd9d5a"}, - {file = "mypy-1.19.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b13cfdd6c87fc3efb69ea4ec18ef79c74c3f98b4e5498ca9b85ab3b2c2329a67"}, - {file = "mypy-1.19.1-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4f28f99c824ecebcdaa2e55d82953e38ff60ee5ec938476796636b86afa3956e"}, - {file = "mypy-1.19.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:c608937067d2fc5a4dd1a5ce92fd9e1398691b8c5d012d66e1ddd430e9244376"}, - {file = "mypy-1.19.1-cp39-cp39-win_amd64.whl", hash = "sha256:409088884802d511ee52ca067707b90c883426bd95514e8cfda8281dc2effe24"}, - {file = "mypy-1.19.1-py3-none-any.whl", hash = "sha256:f1235f5ea01b7db5468d53ece6aaddf1ad0b88d9e7462b86ef96fe04995d7247"}, - {file = "mypy-1.19.1.tar.gz", hash = "sha256:19d88bb05303fe63f71dd2c6270daca27cb9401c4ca8255fe50d1d920e0eb9ba"}, -] - -[package.dependencies] -librt = {version = ">=0.6.2", markers = "platform_python_implementation != \"PyPy\""} -mypy_extensions = ">=1.0.0" -pathspec = ">=0.9.0" -typing_extensions = ">=4.6.0" - -[package.extras] -dmypy = ["psutil (>=4.0)"] -faster-cache = ["orjson"] -install-types = ["pip"] -mypyc = ["setuptools (>=50)"] -reports = ["lxml"] - -[[package]] -name = "mypy-extensions" -version = "1.1.0" -description = "Type system extensions for programs checked with the mypy type checker." -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505"}, - {file = "mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558"}, -] - -[[package]] -name = "numpy" -version = "2.4.0" -description = "Fundamental package for array computing in Python" -optional = false -python-versions = ">=3.11" -groups = ["main"] -files = [ - {file = "numpy-2.4.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:316b2f2584682318539f0bcaca5a496ce9ca78c88066579ebd11fd06f8e4741e"}, - {file = "numpy-2.4.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a2718c1de8504121714234b6f8241d0019450353276c88b9453c9c3d92e101db"}, - {file = "numpy-2.4.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:21555da4ec4a0c942520ead42c3b0dc9477441e085c42b0fbdd6a084869a6f6b"}, - {file = "numpy-2.4.0-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:413aa561266a4be2d06cd2b9665e89d9f54c543f418773076a76adcf2af08bc7"}, - {file = "numpy-2.4.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0feafc9e03128074689183031181fac0897ff169692d8492066e949041096548"}, - {file = "numpy-2.4.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a8fdfed3deaf1928fb7667d96e0567cdf58c2b370ea2ee7e586aa383ec2cb346"}, - {file = "numpy-2.4.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e06a922a469cae9a57100864caf4f8a97a1026513793969f8ba5b63137a35d25"}, - {file = "numpy-2.4.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:927ccf5cd17c48f801f4ed43a7e5673a2724bd2171460be3e3894e6e332ef83a"}, - {file = "numpy-2.4.0-cp311-cp311-win32.whl", hash = "sha256:882567b7ae57c1b1a0250208cc21a7976d8cbcc49d5a322e607e6f09c9e0bd53"}, - {file = "numpy-2.4.0-cp311-cp311-win_amd64.whl", hash = "sha256:8b986403023c8f3bf8f487c2e6186afda156174d31c175f747d8934dfddf3479"}, - {file = "numpy-2.4.0-cp311-cp311-win_arm64.whl", hash = "sha256:3f3096405acc48887458bbf9f6814d43785ac7ba2a57ea6442b581dedbc60ce6"}, - {file = "numpy-2.4.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2a8b6bb8369abefb8bd1801b054ad50e02b3275c8614dc6e5b0373c305291037"}, - {file = "numpy-2.4.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2e284ca13d5a8367e43734148622caf0b261b275673823593e3e3634a6490f83"}, - {file = "numpy-2.4.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:49ff32b09f5aa0cd30a20c2b39db3e669c845589f2b7fc910365210887e39344"}, - {file = "numpy-2.4.0-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:36cbfb13c152b1c7c184ddac43765db8ad672567e7bafff2cc755a09917ed2e6"}, - {file = "numpy-2.4.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:35ddc8f4914466e6fc954c76527aa91aa763682a4f6d73249ef20b418fe6effb"}, - {file = "numpy-2.4.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dc578891de1db95b2a35001b695451767b580bb45753717498213c5ff3c41d63"}, - {file = "numpy-2.4.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:98e81648e0b36e325ab67e46b5400a7a6d4a22b8a7c8e8bbfe20e7db7906bf95"}, - {file = "numpy-2.4.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:d57b5046c120561ba8fa8e4030fbb8b822f3063910fa901ffadf16e2b7128ad6"}, - {file = "numpy-2.4.0-cp312-cp312-win32.whl", hash = "sha256:92190db305a6f48734d3982f2c60fa30d6b5ee9bff10f2887b930d7b40119f4c"}, - {file = "numpy-2.4.0-cp312-cp312-win_amd64.whl", hash = "sha256:680060061adb2d74ce352628cb798cfdec399068aa7f07ba9fb818b2b3305f98"}, - {file = "numpy-2.4.0-cp312-cp312-win_arm64.whl", hash = "sha256:39699233bc72dd482da1415dcb06076e32f60eddc796a796c5fb6c5efce94667"}, - {file = "numpy-2.4.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a152d86a3ae00ba5f47b3acf3b827509fd0b6cb7d3259665e63dafbad22a75ea"}, - {file = "numpy-2.4.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:39b19251dec4de8ff8496cd0806cbe27bf0684f765abb1f4809554de93785f2d"}, - {file = "numpy-2.4.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:009bd0ea12d3c784b6639a8457537016ce5172109e585338e11334f6a7bb88ee"}, - {file = "numpy-2.4.0-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:5fe44e277225fd3dff6882d86d3d447205d43532c3627313d17e754fb3905a0e"}, - {file = "numpy-2.4.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f935c4493eda9069851058fa0d9e39dbf6286be690066509305e52912714dbb2"}, - {file = "numpy-2.4.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8cfa5f29a695cb7438965e6c3e8d06e0416060cf0d709c1b1c1653a939bf5c2a"}, - {file = "numpy-2.4.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ba0cb30acd3ef11c94dc27fbfba68940652492bc107075e7ffe23057f9425681"}, - {file = "numpy-2.4.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:60e8c196cd82cbbd4f130b5290007e13e6de3eca79f0d4d38014769d96a7c475"}, - {file = "numpy-2.4.0-cp313-cp313-win32.whl", hash = "sha256:5f48cb3e88fbc294dc90e215d86fbaf1c852c63dbdb6c3a3e63f45c4b57f7344"}, - {file = "numpy-2.4.0-cp313-cp313-win_amd64.whl", hash = "sha256:a899699294f28f7be8992853c0c60741f16ff199205e2e6cdca155762cbaa59d"}, - {file = "numpy-2.4.0-cp313-cp313-win_arm64.whl", hash = "sha256:9198f447e1dc5647d07c9a6bbe2063cc0132728cc7175b39dbc796da5b54920d"}, - {file = "numpy-2.4.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:74623f2ab5cc3f7c886add4f735d1031a1d2be4a4ae63c0546cfd74e7a31ddf6"}, - {file = "numpy-2.4.0-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:0804a8e4ab070d1d35496e65ffd3cf8114c136a2b81f61dfab0de4b218aacfd5"}, - {file = "numpy-2.4.0-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:02a2038eb27f9443a8b266a66911e926566b5a6ffd1a689b588f7f35b81e7dc3"}, - {file = "numpy-2.4.0-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1889b3a3f47a7b5bee16bc25a2145bd7cb91897f815ce3499db64c7458b6d91d"}, - {file = "numpy-2.4.0-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:85eef4cb5625c47ee6425c58a3502555e10f45ee973da878ac8248ad58c136f3"}, - {file = "numpy-2.4.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6dc8b7e2f4eb184b37655195f421836cfae6f58197b67e3ffc501f1333d993fa"}, - {file = "numpy-2.4.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:44aba2f0cafd287871a495fb3163408b0bd25bbce135c6f621534a07f4f7875c"}, - {file = "numpy-2.4.0-cp313-cp313t-win32.whl", hash = "sha256:20c115517513831860c573996e395707aa9fb691eb179200125c250e895fcd93"}, - {file = "numpy-2.4.0-cp313-cp313t-win_amd64.whl", hash = "sha256:b48e35f4ab6f6a7597c46e301126ceba4c44cd3280e3750f85db48b082624fa4"}, - {file = "numpy-2.4.0-cp313-cp313t-win_arm64.whl", hash = "sha256:4d1cfce39e511069b11e67cd0bd78ceff31443b7c9e5c04db73c7a19f572967c"}, - {file = "numpy-2.4.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:c95eb6db2884917d86cde0b4d4cf31adf485c8ec36bf8696dd66fa70de96f36b"}, - {file = "numpy-2.4.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:65167da969cd1ec3a1df31cb221ca3a19a8aaa25370ecb17d428415e93c1935e"}, - {file = "numpy-2.4.0-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:3de19cfecd1465d0dcf8a5b5ea8b3155b42ed0b639dba4b71e323d74f2a3be5e"}, - {file = "numpy-2.4.0-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:6c05483c3136ac4c91b4e81903cb53a8707d316f488124d0398499a4f8e8ef51"}, - {file = "numpy-2.4.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:36667db4d6c1cea79c8930ab72fadfb4060feb4bfe724141cd4bd064d2e5f8ce"}, - {file = "numpy-2.4.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9a818668b674047fd88c4cddada7ab8f1c298812783e8328e956b78dc4807f9f"}, - {file = "numpy-2.4.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:1ee32359fb7543b7b7bd0b2f46294db27e29e7bbdf70541e81b190836cd83ded"}, - {file = "numpy-2.4.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:e493962256a38f58283de033d8af176c5c91c084ea30f15834f7545451c42059"}, - {file = "numpy-2.4.0-cp314-cp314-win32.whl", hash = "sha256:6bbaebf0d11567fa8926215ae731e1d58e6ec28a8a25235b8a47405d301332db"}, - {file = "numpy-2.4.0-cp314-cp314-win_amd64.whl", hash = "sha256:3d857f55e7fdf7c38ab96c4558c95b97d1c685be6b05c249f5fdafcbd6f9899e"}, - {file = "numpy-2.4.0-cp314-cp314-win_arm64.whl", hash = "sha256:bb50ce5fb202a26fd5404620e7ef820ad1ab3558b444cb0b55beb7ef66cd2d63"}, - {file = "numpy-2.4.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:355354388cba60f2132df297e2d53053d4063f79077b67b481d21276d61fc4df"}, - {file = "numpy-2.4.0-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:1d8f9fde5f6dc1b6fc34df8162f3b3079365468703fee7f31d4e0cc8c63baed9"}, - {file = "numpy-2.4.0-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:e0434aa22c821f44eeb4c650b81c7fbdd8c0122c6c4b5a576a76d5a35625ecd9"}, - {file = "numpy-2.4.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:40483b2f2d3ba7aad426443767ff5632ec3156ef09742b96913787d13c336471"}, - {file = "numpy-2.4.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d9e6a7664ddd9746e20b7325351fe1a8408d0a2bf9c63b5e898290ddc8f09544"}, - {file = "numpy-2.4.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:ecb0019d44f4cdb50b676c5d0cb4b1eae8e15d1ed3d3e6639f986fc92b2ec52c"}, - {file = "numpy-2.4.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:d0ffd9e2e4441c96a9c91ec1783285d80bf835b677853fc2770a89d50c1e48ac"}, - {file = "numpy-2.4.0-cp314-cp314t-win32.whl", hash = "sha256:77f0d13fa87036d7553bf81f0e1fe3ce68d14c9976c9851744e4d3e91127e95f"}, - {file = "numpy-2.4.0-cp314-cp314t-win_amd64.whl", hash = "sha256:b1f5b45829ac1848893f0ddf5cb326110604d6df96cdc255b0bf9edd154104d4"}, - {file = "numpy-2.4.0-cp314-cp314t-win_arm64.whl", hash = "sha256:23a3e9d1a6f360267e8fbb38ba5db355a6a7e9be71d7fce7ab3125e88bb646c8"}, - {file = "numpy-2.4.0-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:b54c83f1c0c0f1d748dca0af516062b8829d53d1f0c402be24b4257a9c48ada6"}, - {file = "numpy-2.4.0-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:aabb081ca0ec5d39591fc33018cd4b3f96e1a2dd6756282029986d00a785fba4"}, - {file = "numpy-2.4.0-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:8eafe7c36c8430b7794edeab3087dec7bf31d634d92f2af9949434b9d1964cba"}, - {file = "numpy-2.4.0-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:2f585f52b2baf07ff3356158d9268ea095e221371f1074fadea2f42544d58b4d"}, - {file = "numpy-2.4.0-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:32ed06d0fe9cae27d8fb5f400c63ccee72370599c75e683a6358dd3a4fb50aaf"}, - {file = "numpy-2.4.0-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:57c540ed8fb1f05cb997c6761cd56db72395b0d6985e90571ff660452ade4f98"}, - {file = "numpy-2.4.0-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:a39fb973a726e63223287adc6dafe444ce75af952d711e400f3bf2b36ef55a7b"}, - {file = "numpy-2.4.0.tar.gz", hash = "sha256:6e504f7b16118198f138ef31ba24d985b124c2c469fe8467007cf30fd992f934"}, -] - -[[package]] -name = "pandas" -version = "2.3.3" -description = "Powerful data structures for data analysis, time series, and statistics" -optional = false -python-versions = ">=3.9" -groups = ["main"] -files = [ - {file = "pandas-2.3.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:376c6446ae31770764215a6c937f72d917f214b43560603cd60da6408f183b6c"}, - {file = "pandas-2.3.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e19d192383eab2f4ceb30b412b22ea30690c9e618f78870357ae1d682912015a"}, - {file = "pandas-2.3.3-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5caf26f64126b6c7aec964f74266f435afef1c1b13da3b0636c7518a1fa3e2b1"}, - {file = "pandas-2.3.3-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:dd7478f1463441ae4ca7308a70e90b33470fa593429f9d4c578dd00d1fa78838"}, - {file = "pandas-2.3.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:4793891684806ae50d1288c9bae9330293ab4e083ccd1c5e383c34549c6e4250"}, - {file = "pandas-2.3.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:28083c648d9a99a5dd035ec125d42439c6c1c525098c58af0fc38dd1a7a1b3d4"}, - {file = "pandas-2.3.3-cp310-cp310-win_amd64.whl", hash = "sha256:503cf027cf9940d2ceaa1a93cfb5f8c8c7e6e90720a2850378f0b3f3b1e06826"}, - {file = "pandas-2.3.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:602b8615ebcc4a0c1751e71840428ddebeb142ec02c786e8ad6b1ce3c8dec523"}, - {file = "pandas-2.3.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8fe25fc7b623b0ef6b5009149627e34d2a4657e880948ec3c840e9402e5c1b45"}, - {file = "pandas-2.3.3-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b468d3dad6ff947df92dcb32ede5b7bd41a9b3cceef0a30ed925f6d01fb8fa66"}, - {file = "pandas-2.3.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b98560e98cb334799c0b07ca7967ac361a47326e9b4e5a7dfb5ab2b1c9d35a1b"}, - {file = "pandas-2.3.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37b5848ba49824e5c30bedb9c830ab9b7751fd049bc7914533e01c65f79791"}, - {file = "pandas-2.3.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:db4301b2d1f926ae677a751eb2bd0e8c5f5319c9cb3f88b0becbbb0b07b34151"}, - {file = "pandas-2.3.3-cp311-cp311-win_amd64.whl", hash = "sha256:f086f6fe114e19d92014a1966f43a3e62285109afe874f067f5abbdcbb10e59c"}, - {file = "pandas-2.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d21f6d74eb1725c2efaa71a2bfc661a0689579b58e9c0ca58a739ff0b002b53"}, - {file = "pandas-2.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3fd2f887589c7aa868e02632612ba39acb0b8948faf5cc58f0850e165bd46f35"}, - {file = "pandas-2.3.3-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ecaf1e12bdc03c86ad4a7ea848d66c685cb6851d807a26aa245ca3d2017a1908"}, - {file = "pandas-2.3.3-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b3d11d2fda7eb164ef27ffc14b4fcab16a80e1ce67e9f57e19ec0afaf715ba89"}, - {file = "pandas-2.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:a68e15f780eddf2b07d242e17a04aa187a7ee12b40b930bfdd78070556550e98"}, - {file = "pandas-2.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:371a4ab48e950033bcf52b6527eccb564f52dc826c02afd9a1bc0ab731bba084"}, - {file = "pandas-2.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:a16dcec078a01eeef8ee61bf64074b4e524a2a3f4b3be9326420cabe59c4778b"}, - {file = "pandas-2.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:56851a737e3470de7fa88e6131f41281ed440d29a9268dcbf0002da5ac366713"}, - {file = "pandas-2.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bdcd9d1167f4885211e401b3036c0c8d9e274eee67ea8d0758a256d60704cfe8"}, - {file = "pandas-2.3.3-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:e32e7cc9af0f1cc15548288a51a3b681cc2a219faa838e995f7dc53dbab1062d"}, - {file = "pandas-2.3.3-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:318d77e0e42a628c04dc56bcef4b40de67918f7041c2b061af1da41dcff670ac"}, - {file = "pandas-2.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:4e0a175408804d566144e170d0476b15d78458795bb18f1304fb94160cabf40c"}, - {file = "pandas-2.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:93c2d9ab0fc11822b5eece72ec9587e172f63cff87c00b062f6e37448ced4493"}, - {file = "pandas-2.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:f8bfc0e12dc78f777f323f55c58649591b2cd0c43534e8355c51d3fede5f4dee"}, - {file = "pandas-2.3.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:75ea25f9529fdec2d2e93a42c523962261e567d250b0013b16210e1d40d7c2e5"}, - {file = "pandas-2.3.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:74ecdf1d301e812db96a465a525952f4dde225fdb6d8e5a521d47e1f42041e21"}, - {file = "pandas-2.3.3-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6435cb949cb34ec11cc9860246ccb2fdc9ecd742c12d3304989017d53f039a78"}, - {file = "pandas-2.3.3-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:900f47d8f20860de523a1ac881c4c36d65efcb2eb850e6948140fa781736e110"}, - {file = "pandas-2.3.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a45c765238e2ed7d7c608fc5bc4a6f88b642f2f01e70c0c23d2224dd21829d86"}, - {file = "pandas-2.3.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:c4fc4c21971a1a9f4bdb4c73978c7f7256caa3e62b323f70d6cb80db583350bc"}, - {file = "pandas-2.3.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:ee15f284898e7b246df8087fc82b87b01686f98ee67d85a17b7ab44143a3a9a0"}, - {file = "pandas-2.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1611aedd912e1ff81ff41c745822980c49ce4a7907537be8692c8dbc31924593"}, - {file = "pandas-2.3.3-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6d2cefc361461662ac48810cb14365a365ce864afe85ef1f447ff5a1e99ea81c"}, - {file = "pandas-2.3.3-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ee67acbbf05014ea6c763beb097e03cd629961c8a632075eeb34247120abcb4b"}, - {file = "pandas-2.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c46467899aaa4da076d5abc11084634e2d197e9460643dd455ac3db5856b24d6"}, - {file = "pandas-2.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:6253c72c6a1d990a410bc7de641d34053364ef8bcd3126f7e7450125887dffe3"}, - {file = "pandas-2.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:1b07204a219b3b7350abaae088f451860223a52cfb8a6c53358e7948735158e5"}, - {file = "pandas-2.3.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:2462b1a365b6109d275250baaae7b760fd25c726aaca0054649286bcfbb3e8ec"}, - {file = "pandas-2.3.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0242fe9a49aa8b4d78a4fa03acb397a58833ef6199e9aa40a95f027bb3a1b6e7"}, - {file = "pandas-2.3.3-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a21d830e78df0a515db2b3d2f5570610f5e6bd2e27749770e8bb7b524b89b450"}, - {file = "pandas-2.3.3-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2e3ebdb170b5ef78f19bfb71b0dc5dc58775032361fa188e814959b74d726dd5"}, - {file = "pandas-2.3.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d051c0e065b94b7a3cea50eb1ec32e912cd96dba41647eb24104b6c6c14c5788"}, - {file = "pandas-2.3.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:3869faf4bd07b3b66a9f462417d0ca3a9df29a9f6abd5d0d0dbab15dac7abe87"}, - {file = "pandas-2.3.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c503ba5216814e295f40711470446bc3fd00f0faea8a086cbc688808e26f92a2"}, - {file = "pandas-2.3.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a637c5cdfa04b6d6e2ecedcb81fc52ffb0fd78ce2ebccc9ea964df9f658de8c8"}, - {file = "pandas-2.3.3-cp39-cp39-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:854d00d556406bffe66a4c0802f334c9ad5a96b4f1f868adf036a21b11ef13ff"}, - {file = "pandas-2.3.3-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bf1f8a81d04ca90e32a0aceb819d34dbd378a98bf923b6398b9a3ec0bf44de29"}, - {file = "pandas-2.3.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:23ebd657a4d38268c7dfbdf089fbc31ea709d82e4923c5ffd4fbd5747133ce73"}, - {file = "pandas-2.3.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5554c929ccc317d41a5e3d1234f3be588248e61f08a74dd17c9eabb535777dc9"}, - {file = "pandas-2.3.3-cp39-cp39-win_amd64.whl", hash = "sha256:d3e28b3e83862ccf4d85ff19cf8c20b2ae7e503881711ff2d534dc8f761131aa"}, - {file = "pandas-2.3.3.tar.gz", hash = "sha256:e05e1af93b977f7eafa636d043f9f94c7ee3ac81af99c13508215942e64c993b"}, -] - -[package.dependencies] -numpy = [ - {version = ">=1.23.2", markers = "python_version == \"3.11\""}, - {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, -] -python-dateutil = ">=2.8.2" -pytz = ">=2020.1" -tzdata = ">=2022.7" - -[package.extras] -all = ["PyQt5 (>=5.15.9)", "SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)", "beautifulsoup4 (>=4.11.2)", "bottleneck (>=1.3.6)", "dataframe-api-compat (>=0.1.7)", "fastparquet (>=2022.12.0)", "fsspec (>=2022.11.0)", "gcsfs (>=2022.11.0)", "html5lib (>=1.1)", "hypothesis (>=6.46.1)", "jinja2 (>=3.1.2)", "lxml (>=4.9.2)", "matplotlib (>=3.6.3)", "numba (>=0.56.4)", "numexpr (>=2.8.4)", "odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "pandas-gbq (>=0.19.0)", "psycopg2 (>=2.9.6)", "pyarrow (>=10.0.1)", "pymysql (>=1.0.2)", "pyreadstat (>=1.2.0)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "qtpy (>=2.3.0)", "s3fs (>=2022.11.0)", "scipy (>=1.10.0)", "tables (>=3.8.0)", "tabulate (>=0.9.0)", "xarray (>=2022.12.0)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)", "zstandard (>=0.19.0)"] -aws = ["s3fs (>=2022.11.0)"] -clipboard = ["PyQt5 (>=5.15.9)", "qtpy (>=2.3.0)"] -compression = ["zstandard (>=0.19.0)"] -computation = ["scipy (>=1.10.0)", "xarray (>=2022.12.0)"] -consortium-standard = ["dataframe-api-compat (>=0.1.7)"] -excel = ["odfpy (>=1.4.1)", "openpyxl (>=3.1.0)", "python-calamine (>=0.1.7)", "pyxlsb (>=1.0.10)", "xlrd (>=2.0.1)", "xlsxwriter (>=3.0.5)"] -feather = ["pyarrow (>=10.0.1)"] -fss = ["fsspec (>=2022.11.0)"] -gcp = ["gcsfs (>=2022.11.0)", "pandas-gbq (>=0.19.0)"] -hdf5 = ["tables (>=3.8.0)"] -html = ["beautifulsoup4 (>=4.11.2)", "html5lib (>=1.1)", "lxml (>=4.9.2)"] -mysql = ["SQLAlchemy (>=2.0.0)", "pymysql (>=1.0.2)"] -output-formatting = ["jinja2 (>=3.1.2)", "tabulate (>=0.9.0)"] -parquet = ["pyarrow (>=10.0.1)"] -performance = ["bottleneck (>=1.3.6)", "numba (>=0.56.4)", "numexpr (>=2.8.4)"] -plot = ["matplotlib (>=3.6.3)"] -postgresql = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "psycopg2 (>=2.9.6)"] -pyarrow = ["pyarrow (>=10.0.1)"] -spss = ["pyreadstat (>=1.2.0)"] -sql-other = ["SQLAlchemy (>=2.0.0)", "adbc-driver-postgresql (>=0.8.0)", "adbc-driver-sqlite (>=0.8.0)"] -test = ["hypothesis (>=6.46.1)", "pytest (>=7.3.2)", "pytest-xdist (>=2.2.0)"] -xml = ["lxml (>=4.9.2)"] - -[[package]] -name = "pathspec" -version = "0.12.1" -description = "Utility library for gitignore style pattern matching of file paths." -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, - {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, -] - -[[package]] -name = "pycparser" -version = "2.23" -description = "C parser in Python" -optional = false -python-versions = ">=3.8" -groups = ["main"] -markers = "platform_python_implementation != \"PyPy\" and implementation_name != \"PyPy\"" -files = [ - {file = "pycparser-2.23-py3-none-any.whl", hash = "sha256:e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934"}, - {file = "pycparser-2.23.tar.gz", hash = "sha256:78816d4f24add8f10a06d6f05b4d424ad9e96cfebf68a4ddc99c65c0720d00c2"}, -] - -[[package]] -name = "pygithub" -version = "2.8.1" -description = "Use the full Github API v3" -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "pygithub-2.8.1-py3-none-any.whl", hash = "sha256:23a0a5bca93baef082e03411bf0ce27204c32be8bfa7abc92fe4a3e132936df0"}, - {file = "pygithub-2.8.1.tar.gz", hash = "sha256:341b7c78521cb07324ff670afd1baa2bf5c286f8d9fd302c1798ba594a5400c9"}, -] - -[package.dependencies] -pyjwt = {version = ">=2.4.0", extras = ["crypto"]} -pynacl = ">=1.4.0" -requests = ">=2.14.0" -typing-extensions = ">=4.5.0" -urllib3 = ">=1.26.0" - -[[package]] -name = "pyjwt" -version = "2.10.1" -description = "JSON Web Token implementation in Python" -optional = false -python-versions = ">=3.9" -groups = ["main"] -files = [ - {file = "PyJWT-2.10.1-py3-none-any.whl", hash = "sha256:dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb"}, - {file = "pyjwt-2.10.1.tar.gz", hash = "sha256:3cc5772eb20009233caf06e9d8a0577824723b44e6648ee0a2aedb6cf9381953"}, -] - -[package.dependencies] -cryptography = {version = ">=3.4.0", optional = true, markers = "extra == \"crypto\""} - -[package.extras] -crypto = ["cryptography (>=3.4.0)"] -dev = ["coverage[toml] (==5.0.4)", "cryptography (>=3.4.0)", "pre-commit", "pytest (>=6.0.0,<7.0.0)", "sphinx", "sphinx-rtd-theme", "zope.interface"] -docs = ["sphinx", "sphinx-rtd-theme", "zope.interface"] -tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] - -[[package]] -name = "pynacl" -version = "1.6.2" -description = "Python binding to the Networking and Cryptography (NaCl) library" -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "pynacl-1.6.2-cp314-cp314t-macosx_10_10_universal2.whl", hash = "sha256:622d7b07cc5c02c666795792931b50c91f3ce3c2649762efb1ef0d5684c81594"}, - {file = "pynacl-1.6.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d071c6a9a4c94d79eb665db4ce5cedc537faf74f2355e4d502591d850d3913c0"}, - {file = "pynacl-1.6.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fe9847ca47d287af41e82be1dd5e23023d3c31a951da134121ab02e42ac218c9"}, - {file = "pynacl-1.6.2-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:04316d1fc625d860b6c162fff704eb8426b1a8bcd3abacea11142cbd99a6b574"}, - {file = "pynacl-1.6.2-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:44081faff368d6c5553ccf55322ef2819abb40e25afaec7e740f159f74813634"}, - {file = "pynacl-1.6.2-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:a9f9932d8d2811ce1a8ffa79dcbdf3970e7355b5c8eb0c1a881a57e7f7d96e88"}, - {file = "pynacl-1.6.2-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:bc4a36b28dd72fb4845e5d8f9760610588a96d5a51f01d84d8c6ff9849968c14"}, - {file = "pynacl-1.6.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:3bffb6d0f6becacb6526f8f42adfb5efb26337056ee0831fb9a7044d1a964444"}, - {file = "pynacl-1.6.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:2fef529ef3ee487ad8113d287a593fa26f48ee3620d92ecc6f1d09ea38e0709b"}, - {file = "pynacl-1.6.2-cp314-cp314t-win32.whl", hash = "sha256:a84bf1c20339d06dc0c85d9aea9637a24f718f375d861b2668b2f9f96fa51145"}, - {file = "pynacl-1.6.2-cp314-cp314t-win_amd64.whl", hash = "sha256:320ef68a41c87547c91a8b58903c9caa641ab01e8512ce291085b5fe2fcb7590"}, - {file = "pynacl-1.6.2-cp314-cp314t-win_arm64.whl", hash = "sha256:d29bfe37e20e015a7d8b23cfc8bd6aa7909c92a1b8f41ee416bbb3e79ef182b2"}, - {file = "pynacl-1.6.2-cp38-abi3-macosx_10_10_universal2.whl", hash = "sha256:c949ea47e4206af7c8f604b8278093b674f7c79ed0d4719cc836902bf4517465"}, - {file = "pynacl-1.6.2-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8845c0631c0be43abdd865511c41eab235e0be69c81dc66a50911594198679b0"}, - {file = "pynacl-1.6.2-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:22de65bb9010a725b0dac248f353bb072969c94fa8d6b1f34b87d7953cf7bbe4"}, - {file = "pynacl-1.6.2-cp38-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:46065496ab748469cdd999246d17e301b2c24ae2fdf739132e580a0e94c94a87"}, - {file = "pynacl-1.6.2-cp38-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8a66d6fb6ae7661c58995f9c6435bda2b1e68b54b598a6a10247bfcdadac996c"}, - {file = "pynacl-1.6.2-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:26bfcd00dcf2cf160f122186af731ae30ab120c18e8375684ec2670dccd28130"}, - {file = "pynacl-1.6.2-cp38-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:c8a231e36ec2cab018c4ad4358c386e36eede0319a0c41fed24f840b1dac59f6"}, - {file = "pynacl-1.6.2-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:68be3a09455743ff9505491220b64440ced8973fe930f270c8e07ccfa25b1f9e"}, - {file = "pynacl-1.6.2-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:8b097553b380236d51ed11356c953bf8ce36a29a3e596e934ecabe76c985a577"}, - {file = "pynacl-1.6.2-cp38-abi3-win32.whl", hash = "sha256:5811c72b473b2f38f7e2a3dc4f8642e3a3e9b5e7317266e4ced1fba85cae41aa"}, - {file = "pynacl-1.6.2-cp38-abi3-win_amd64.whl", hash = "sha256:62985f233210dee6548c223301b6c25440852e13d59a8b81490203c3227c5ba0"}, - {file = "pynacl-1.6.2-cp38-abi3-win_arm64.whl", hash = "sha256:834a43af110f743a754448463e8fd61259cd4ab5bbedcf70f9dabad1d28a394c"}, - {file = "pynacl-1.6.2.tar.gz", hash = "sha256:018494d6d696ae03c7e656e5e74cdfd8ea1326962cc401bcf018f1ed8436811c"}, -] - -[package.dependencies] -cffi = {version = ">=2.0.0", markers = "platform_python_implementation != \"PyPy\" and python_version >= \"3.9\""} - -[package.extras] -docs = ["sphinx (<7)", "sphinx_rtd_theme"] -tests = ["hypothesis (>=3.27.0)", "pytest (>=7.4.0)", "pytest-cov (>=2.10.1)", "pytest-xdist (>=3.5.0)"] - -[[package]] -name = "python-dateutil" -version = "2.9.0.post0" -description = "Extensions to the standard Python datetime module" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" -groups = ["main"] -files = [ - {file = "python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3"}, - {file = "python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427"}, -] - -[package.dependencies] -six = ">=1.5" - -[[package]] -name = "pytz" -version = "2025.2" -description = "World timezone definitions, modern and historical" -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00"}, - {file = "pytz-2025.2.tar.gz", hash = "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3"}, -] - -[[package]] -name = "requests" -version = "2.32.5" -description = "Python HTTP for Humans." -optional = false -python-versions = ">=3.9" -groups = ["main"] -files = [ - {file = "requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6"}, - {file = "requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf"}, -] - -[package.dependencies] -certifi = ">=2017.4.17" -charset_normalizer = ">=2,<4" -idna = ">=2.5,<4" -urllib3 = ">=1.21.1,<3" - -[package.extras] -socks = ["PySocks (>=1.5.6,!=1.5.7)"] -use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] - -[[package]] -name = "six" -version = "1.17.0" -description = "Python 2 and 3 compatibility utilities" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" -groups = ["main"] -files = [ - {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, - {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, -] - -[[package]] -name = "typing-extensions" -version = "4.15.0" -description = "Backported and Experimental Type Hints for Python 3.9+" -optional = false -python-versions = ">=3.9" -groups = ["main"] -files = [ - {file = "typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548"}, - {file = "typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466"}, -] - -[[package]] -name = "tzdata" -version = "2025.3" -description = "Provider of IANA time zone data" -optional = false -python-versions = ">=2" -groups = ["main"] -files = [ - {file = "tzdata-2025.3-py2.py3-none-any.whl", hash = "sha256:06a47e5700f3081aab02b2e513160914ff0694bce9947d6b76ebd6bf57cfc5d1"}, - {file = "tzdata-2025.3.tar.gz", hash = "sha256:de39c2ca5dc7b0344f2eba86f49d614019d29f060fc4ebc8a417896a620b56a7"}, -] - -[[package]] -name = "urllib3" -version = "2.6.2" -description = "HTTP library with thread-safe connection pooling, file post, and more." -optional = false -python-versions = ">=3.9" -groups = ["main"] -files = [ - {file = "urllib3-2.6.2-py3-none-any.whl", hash = "sha256:ec21cddfe7724fc7cb4ba4bea7aa8e2ef36f607a4bab81aa6ce42a13dc3f03dd"}, - {file = "urllib3-2.6.2.tar.gz", hash = "sha256:016f9c98bb7e98085cb2b4b17b87d2c702975664e4f060c6532e64d1c1a5e797"}, -] - -[package.extras] -brotli = ["brotli (>=1.2.0) ; platform_python_implementation == \"CPython\"", "brotlicffi (>=1.2.0.0) ; platform_python_implementation != \"CPython\""] -h2 = ["h2 (>=4,<5)"] -socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] -zstd = ["backports-zstd (>=1.0.0) ; python_version < \"3.14\""] - -[metadata] -lock-version = "2.1" -python-versions = "^3.11" -content-hash = "312a017404c93dcf25d5cc355ffc2cf9eef47e22c4cfd0b50e533993510a91e0" diff --git a/pyproject.toml b/pyproject.toml index bb7c871..3dbb7fb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,16 +1,12 @@ -[tool.poetry] +[project] name = "awesome-quant" version = "0.1.0" description = "" -authors = ["Wilson Freitas "] +authors = [{ name = "Wilson Freitas", email = "wilson.freitas@gmail.com" }] readme = "README.md" - -[tool.poetry.dependencies] -python = "^3.11" -PyGithub = "^2.2.0" -pandas = "^2.2.0" -mypy = "^1.14.0" - -[build-system] -requires = ["poetry-core"] -build-backend = "poetry.core.masonry.api" +requires-python = ">=3.11" +dependencies = [ + "PyGithub>=2.2.0", + "pandas>=2.2.0", + "mypy>=1.14.0", +] diff --git a/site/.gitignore b/site/.gitignore deleted file mode 100644 index 994efc7..0000000 --- a/site/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -/.quarto/ -docs \ No newline at end of file diff --git a/site/CODE_OF_CONDUCT.qmd b/site/CODE_OF_CONDUCT.qmd deleted file mode 100644 index 380e61b..0000000 --- a/site/CODE_OF_CONDUCT.qmd +++ /dev/null @@ -1,134 +0,0 @@ ---- -title: "Contributor Covenant Code of Conduct" -include-in-header: - - text: | - ---- - -## Our Pledge - -We as members, contributors, and leaders pledge to make participation in our -community a harassment-free experience for everyone, regardless of age, body -size, visible or invisible disability, ethnicity, sex characteristics, gender -identity and expression, level of experience, education, socio-economic status, -nationality, personal appearance, race, religion, or sexual identity -and orientation. - -We pledge to act and interact in ways that contribute to an open, welcoming, -diverse, inclusive, and healthy community. - -## Our Standards - -Examples of behavior that contributes to a positive environment for our -community include: - -* Demonstrating empathy and kindness toward other people -* Being respectful of differing opinions, viewpoints, and experiences -* Giving and gracefully accepting constructive feedback -* Accepting responsibility and apologizing to those affected by our mistakes, - and learning from the experience -* Focusing on what is best not just for us as individuals, but for the - overall community - -Examples of unacceptable behavior include: - -* The use of sexualized language or imagery, and sexual attention or - advances of any kind -* Trolling, insulting or derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or email - address, without their explicit permission -* Other conduct which could reasonably be considered inappropriate in a - professional setting - -## Enforcement Responsibilities - -Community leaders are responsible for clarifying and enforcing our standards of -acceptable behavior and will take appropriate and fair corrective action in -response to any behavior that they deem inappropriate, threatening, offensive, -or harmful. - -Community leaders have the right and responsibility to remove, edit, or reject -comments, commits, code, wiki edits, issues, and other contributions that are -not aligned to this Code of Conduct, and will communicate reasons for moderation -decisions when appropriate. - -## Scope - -This Code of Conduct applies within all community spaces, and also applies when -an individual is officially representing the community in public spaces. -Examples of representing our community include using an official e-mail address, -posting via an official social media account, or acting as an appointed -representative at an online or offline event. - -## Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be -reported to the community leaders responsible for enforcement at -awesom3quant@gmail.com. -All complaints will be reviewed and investigated promptly and fairly. - -All community leaders are obligated to respect the privacy and security of the -reporter of any incident. - -## Enforcement Guidelines - -Community leaders will follow these Community Impact Guidelines in determining -the consequences for any action they deem in violation of this Code of Conduct: - -### 1. Correction - -**Community Impact**: Use of inappropriate language or other behavior deemed -unprofessional or unwelcome in the community. - -**Consequence**: A private, written warning from community leaders, providing -clarity around the nature of the violation and an explanation of why the -behavior was inappropriate. A public apology may be requested. - -### 2. Warning - -**Community Impact**: A violation through a single incident or series -of actions. - -**Consequence**: A warning with consequences for continued behavior. No -interaction with the people involved, including unsolicited interaction with -those enforcing the Code of Conduct, for a specified period of time. This -includes avoiding interactions in community spaces as well as external channels -like social media. Violating these terms may lead to a temporary or -permanent ban. - -### 3. Temporary Ban - -**Community Impact**: A serious violation of community standards, including -sustained inappropriate behavior. - -**Consequence**: A temporary ban from any sort of interaction or public -communication with the community for a specified period of time. No public or -private interaction with the people involved, including unsolicited interaction -with those enforcing the Code of Conduct, is allowed during this period. -Violating these terms may lead to a permanent ban. - -### 4. Permanent Ban - -**Community Impact**: Demonstrating a pattern of violation of community -standards, including sustained inappropriate behavior, harassment of an -individual, or aggression toward or disparagement of classes of individuals. - -**Consequence**: A permanent ban from any sort of public interaction within -the community. - -## Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], -version 2.0, available at -https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. - -Community Impact Guidelines were inspired by [Mozilla's code of conduct -enforcement ladder](https://github.com/mozilla/diversity). - -[homepage]: https://www.contributor-covenant.org - -For answers to common questions about this code of conduct, see the FAQ at -https://www.contributor-covenant.org/faq. Translations are available at -https://www.contributor-covenant.org/translations. diff --git a/site/_quarto.yml b/site/_quarto.yml deleted file mode 100644 index 4915e21..0000000 --- a/site/_quarto.yml +++ /dev/null @@ -1,26 +0,0 @@ -project: - type: website - output-dir: docs - render: - - "*.qmd" - - "*.ipynb" - - "!quant.md" - - "!github.ipynb" - -website: - title: "Awesome Quant" - navbar: - left: - - href: index.qmd - text: Home - - href: projects.qmd - text: Projects - - href: CODE_OF_CONDUCT.qmd - text: Code of Conduct - -format: - html: - theme: cosmo - css: styles.css - toc: true - diff --git a/site/about.qmd b/site/about.qmd deleted file mode 100644 index 303e38d..0000000 --- a/site/about.qmd +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: "About" -include-in-header: - - text: | - ---- - -About this site diff --git a/site/generate.py b/site/generate.py new file mode 100644 index 0000000..36c0468 --- /dev/null +++ b/site/generate.py @@ -0,0 +1,417 @@ +#!/usr/bin/env python3 +"""Parse README.md and generate a static HTML site for awesome-quant. + +Can run in two modes: +1. With projects.csv (produced by parse.py) — includes stars, last commit, etc. +2. Without CSV — parses README.md directly for a quick local preview. +""" + +import csv +import html +import re +import sys +from pathlib import Path + + +def slugify(text: str) -> str: + """Convert text to lowercase hyphen-separated slug.""" + text = text.lower().strip() + text = re.sub(r"[&/]+", "-", text) + text = re.sub(r"[^\w\s-]", "", text) + text = re.sub(r"[\s_]+", "-", text) + text = re.sub(r"-+", "-", text) + return text.strip("-") + + +def parse_readme(path: str) -> list[dict]: + """Parse README.md and return a list of project entries (no API data).""" + entries = [] + current_language = "" + current_category = "" + + re_h2 = re.compile(r"^## (.+)$") + re_h3 = re.compile(r"^### (.+)$") + re_entry = re.compile(r"^\s*- \[(.+?)\]\((.+?)\) - (.+)$") + re_github = re.compile(r"\[GitHub\]\((https://github\.com/[\w-]+/[-\w\.]+)\)") + + skip_sections = {"Languages"} + + # Strip markdown badge images before parsing + re_badge = re.compile(r"\s*!\[[^\]]*\]\([^)]*\)\s*") + + with open(path, "r", encoding="utf-8") as f: + for line in f: + line = re_badge.sub(" ", line).rstrip("\n") + + m = re_h2.match(line) + if m: + current_language = m.group(1).strip() + current_category = "" + continue + + m = re_h3.match(line) + if m: + current_category = m.group(1).strip() + continue + + if current_language in skip_sections: + continue + + m = re_entry.match(line) + if m: + name = m.group(1).strip() + url = m.group(2).strip() + desc = m.group(3).strip() + + github_url = "" + gh_match = re_github.search(desc) + if gh_match: + github_url = gh_match.group(1) + desc = re_github.sub("", desc).rstrip(". ").rstrip() + "." + elif "github.com" in url: + github_url = url + + repo = "" + if github_url: + repo_match = re.match( + r"https://github\.com/([\w-]+/[-\w\.]+)", github_url + ) + if repo_match: + repo = repo_match.group(1) + + is_cran = "cran.r-project.org" in url + is_pypi = "pypi.org" in url or "pypi.python.org" in url + is_commercial = current_language == "Commercial & Proprietary Services" + category = current_category or current_language + section_slug = slugify(category) + + entries.append( + { + "project": name, + "language": current_language, + "category": category, + "section_slug": section_slug, + "url": url, + "description": desc, + "github": bool(github_url), + "cran": is_cran, + "pypi": is_pypi, + "commercial": is_commercial, + "github_url": github_url, + "repo": repo, + "stars": 0, + "last_commit": "", + } + ) + + return entries + + +def load_csv(path: str) -> list[dict]: + """Load projects from CSV produced by parse.py.""" + entries = [] + with open(path, "r", encoding="utf-8") as f: + reader = csv.DictReader(f) + for row in reader: + # Normalize booleans + for key in ("github", "cran", "pypi", "commercial"): + row[key] = row.get(key, "").lower() in ("true", "1", "yes") + # Normalize numbers + row["stars"] = int(float(row.get("stars", 0) or 0)) + # Extract github_url and repo from CSV data + repo = row.get("repo", "") + row["github_url"] = f"https://github.com/{repo}" if repo else "" + # Clean description: strip [GitHub](url) if present + desc = row.get("description", "") + desc = re.sub( + r"\s*\[GitHub\]\(https://github\.com/[\w-]+/[-\w\.]+\)\s*", + "", + desc, + ) + desc = desc.rstrip(". ").rstrip() + if desc and not desc.endswith("."): + desc += "." + row["description"] = desc + entries.append(row) + return entries + + +def format_stars(n: int) -> str: + """Format star count for display.""" + if n >= 1000: + return f"{n / 1000:.1f}k".replace(".0k", "k") + return str(n) if n > 0 else "" + + +def build_tags_html(e: dict) -> str: + """Build tag pills for an entry.""" + esc = html.escape + tags = [] + + # Language tag + lang = e.get("language", "") + if lang and lang != "Commercial & Proprietary Services" and lang != "Related Lists": + lang_slug = slugify(lang) + tags.append( + f'' + ) + + # Section tag + section_slug = e.get("section_slug", "") + category = e.get("category", "") + if section_slug and section_slug != slugify(lang): + tags.append( + f'' + ) + + # Source tags + if e.get("github"): + tags.append( + '' + ) + if e.get("cran"): + tags.append( + '' + ) + if e.get("pypi"): + tags.append( + '' + ) + if e.get("commercial"): + tags.append( + '' + ) + + return "\n ".join(tags) + + +def generate_html(entries: list[dict]) -> str: + """Generate the full HTML page from project entries.""" + languages = sorted( + set( + e["language"] + for e in entries + if e.get("language") and e["language"] != "Languages" + ) + ) + + # Build table rows + rows = [] + for i, e in enumerate(entries, 1): + esc = html.escape + name = esc(e["project"]) + url = esc(e["url"]) + desc = esc(e["description"]) + language = esc(e.get("language", "")) + category = esc(e.get("category", "")) + github_url = esc(e.get("github_url", "")) + repo = esc(e.get("repo", "")) + stars = int(e.get("stars", 0) or 0) + last_commit = e.get("last_commit", "") or "" + is_github = e.get("github", False) + is_cran = e.get("cran", False) + is_pypi = e.get("pypi", False) + is_commercial = e.get("commercial", False) + + # Stars display + stars_html = ( + f'' + f'' + f" {format_stars(stars)}" + if stars > 0 + else "" + ) + + # Last update display + last_update_html = ( + f'{esc(last_commit)}' + if last_commit and last_commit != "error" + else "" + ) + + # Source flags for data attributes + sources = [] + if is_github: + sources.append("github") + if is_cran: + sources.append("cran") + if is_pypi: + sources.append("pypi") + if is_commercial: + sources.append("commercial") + sources_attr = esc(" ".join(sources)) + + tags_html = build_tags_html(e) + + rows.append( + f""" + {i} + + {name} + {category} + + {stars_html} + {last_update_html} + + {tags_html} + + + + + +
+

{desc}

+ +
+ + """ + ) + + total = len(entries) + total_stars = sum(int(e.get("stars", 0) or 0) for e in entries) + + return f""" + + + + + Awesome Quant + + + + + + + + Skip to content + +
+
+ +
+

Awesome Quant

+

A curated list of insanely awesome libraries, packages and resources for Quants.

+

Maintained by Wilson Freitas

+
+ {total} projects + + {len(languages)} languages + + {format_stars(total_stars)} total stars +
+ Browse the List +
+
+
+ +
+
+
+
+
+ + + / +
+
+ + + +
+ + + + + + + + + + + + +{chr(10).join(rows)} + +
#Project Stars Last Update Tags
+
+ + + +
+
+
+ +
+
+

Know a great project?

+

Contribute to the list by opening a pull request on GitHub.

+ Contribute on GitHub +
+
+
+ + + + + +""" + + +def main(): + root = Path(__file__).resolve().parent.parent + readme = root / "README.md" + csv_path = root / "site" / "projects.csv" + output = root / "site" / "index.html" + + # Prefer CSV if it exists (has stars, last commit from API) + if csv_path.exists(): + print(f"Loading from {csv_path}") + entries = load_csv(str(csv_path)) + elif readme.exists(): + print(f"Parsing {readme} (no CSV — stars/dates will be empty)") + entries = parse_readme(str(readme)) + else: + print(f"ERROR: neither {csv_path} nor {readme} found", file=sys.stderr) + sys.exit(1) + + print(f"Loaded {len(entries)} projects") + html_content = generate_html(entries) + output.write_text(html_content, encoding="utf-8") + print(f"Generated {output}") + + +if __name__ == "__main__": + main() diff --git a/site/index.html b/site/index.html new file mode 100644 index 0000000..a174550 --- /dev/null +++ b/site/index.html @@ -0,0 +1,12775 @@ + + + + + + Awesome Quant + + + + + + + + Skip to content + +
+
+ +
+

Awesome Quant

+

A curated list of insanely awesome libraries, packages and resources for Quants.

+

Maintained by Wilson Freitas

+
+ 495 projects + + 18 languages + + 1011k total stars +
+ Browse the List +
+
+
+ +
+
+
+
+
+ + + / +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#Project Stars Last Update Tags
1 + numpy + Numerical Libraries & Data Structures + 31.6k2026-03-22 + + + +
2 + scipy + Numerical Libraries & Data Structures + 14.6k2026-03-21 + + + +
3 + pandas + Numerical Libraries & Data Structures + 48.2k2026-03-22 + + + +
4 + polars + Numerical Libraries & Data Structures + 37.8k2026-03-20 + + + +
5 + quantdsl + Numerical Libraries & Data Structures + 3772017-10-26 + + + +
6 + statistics + Numerical Libraries & Data Structures + + + +
7 + sympy + Numerical Libraries & Data Structures + 14.5k2026-03-22 + + + +
8 + pymc3 + Numerical Libraries & Data Structures + 9.5k2026-03-04 + + + +
9 + modelx + Numerical Libraries & Data Structures + 1222026-02-16 + + + +
10 + ArcticDB + Numerical Libraries & Data Structures + 2.2k2026-03-20 + + + +
11 + pmxt + Numerical Libraries & Data Structures + 1.1k2026-03-22 + + + +
12 + OpenBB Terminal + Financial Instruments and Pricing + 63.4k2026-03-19 + + + +
13 + Fincept Terminal + Financial Instruments and Pricing + 2.9k2026-03-21 + + + +
14 + PyQL + Financial Instruments and Pricing + 1.3k2025-08-20 + + + +
15 + pyfin + Financial Instruments and Pricing + 3162014-12-03 + + + +
16 + vollib + Financial Instruments and Pricing + 9292023-04-01 + + + +
17 + QuantPy + Financial Instruments and Pricing + 9732017-11-28 + + + +
18 + Finance-Python + Financial Instruments and Pricing + 8732024-01-01 + + + +
19 + ffn + Financial Instruments and Pricing + 2.5k2026-03-21 + + + +
20 + pynance + Financial Instruments and Pricing + 4402021-02-03 + + + +
21 + tia + Financial Instruments and Pricing + 4302017-06-05 + + + +
22 + pysabr + Financial Instruments and Pricing + 5922022-04-21 + + + +
23 + FinancePy + Financial Instruments and Pricing + 2.8k2026-03-11 + + + +
24 + gs-quant + Financial Instruments and Pricing + 10k2026-03-19 + + + +
25 + willowtree + Financial Instruments and Pricing + 3442018-07-14 + + + +
26 + financial-engineering + Financial Instruments and Pricing + 5002017-11-20 + + + +
27 + optlib + Financial Instruments and Pricing + 1.3k2022-11-18 + + + +
28 + tf-quant-finance + Financial Instruments and Pricing + 5.3k2026-02-12 + + + +
29 + Q-Fin + Financial Instruments and Pricing + 5822023-04-07 + + + +
30 + Quantsbin + Financial Instruments and Pricing + 6122021-05-23 + + + +
31 + finoptions + Financial Instruments and Pricing + 2952024-02-01 + + + +
32 + pypme + Financial Instruments and Pricing + 132026-01-16 + + + +
33 + AbsBox + Financial Instruments and Pricing + 642026-03-17 + + + +
34 + Intrinsic-Value-Calculator + Financial Instruments and Pricing + 832025-07-02 + + + +
35 + Kelly-Criterion + Financial Instruments and Pricing + 1102019-02-16 + + + +
36 + rateslib + Financial Instruments and Pricing + 3272026-02-15 + + + +
37 + fypy + Financial Instruments and Pricing + 1392025-02-27 + + + +
38 + optionlab + Financial Instruments and Pricing + 4872025-12-25 + + + +
39 + pandas_talib + Indicators + 7812018-05-30 + + + +
40 + finta + Indicators + 2.2k2022-07-24 + + + +
41 + Tulipy + Indicators + 922019-04-11 + + + +
42 + lppls + Indicators + 4502026-02-15 + + + +
43 + talipp + Indicators + 5262025-09-09 + + + +
44 + streaming_indicators + Indicators + 1462025-04-27 + + + +
45 + the0 + Trading & Backtesting + 2092026-03-22 + + + +
46 + skfolio + Trading & Backtesting + 1.9k2026-03-14 + + + +
47 + Investing algorithm framework + Trading & Backtesting + 7012026-03-20 + + + +
48 + QSTrader + Trading & Backtesting + 3.3k2024-06-24 + + + +
49 + Blankly + Trading & Backtesting + 2.4k2024-12-30 + + + +
50 + TA-Lib + Trading & Backtesting + 11.8k2026-03-16 + + + +
51 + zipline + Trading & Backtesting + 19.5k2020-10-14 + + + +
52 + zipline-reloaded + Trading & Backtesting + 1.7k2025-11-13 + + + +
53 + QuantSoftware Toolkit + Trading & Backtesting + 4762016-10-07 + + + +
54 + quantitative + Trading & Backtesting + 662019-03-03 + + + +
55 + analyzer + Trading & Backtesting + 2142015-12-22 + + + +
56 + bt + Trading & Backtesting + 2.8k2026-03-21 + + + +
57 + backtrader + Trading & Backtesting + 20.9k2023-04-19 + + + +
58 + pythalesians + Trading & Backtesting + 632016-09-23 + + + +
59 + pybacktest + Trading & Backtesting + 8172019-09-09 + + + +
60 + pyalgotrade + Trading & Backtesting + 4.6k2023-03-05 + + + +
61 + basana + Trading & Backtesting + 8202025-12-29 + + + +
62 + ta + Trading & Backtesting + 4.9k2026-03-18 + + + +
63 + algobroker + Trading & Backtesting + 972016-03-31 + + + +
64 + finmarketpy + Trading & Backtesting + 3.7k2025-03-10 + + + +
65 + binary-martingale + Trading & Backtesting + 482017-10-16 + + + +
66 + fooltrader + Trading & Backtesting + 1.2k2020-07-19 + + + +
67 + zvt + Trading & Backtesting + 4k2026-03-01 + + + +
68 + pylivetrader + Trading & Backtesting + 6812022-04-11 + + + +
69 + pipeline-live + Trading & Backtesting + 2062022-04-11 + + + +
70 + zipline-extensions + Trading & Backtesting + 182018-09-17 + + + +
71 + moonshot + Trading & Backtesting + 2562024-08-14 + + + +
72 + PyPortfolioOpt + Trading & Backtesting + 5.6k2026-03-10 + + + +
73 + Eiten + Trading & Backtesting + 3.2k2020-09-21 + + + +
74 + riskparity.py + Trading & Backtesting + 3182024-05-27 + + + +
75 + mlfinlab + Trading & Backtesting + 4.6k2021-12-01 + + + +
76 + pyqstrat + Trading & Backtesting + 3712023-11-05 + + + +
77 + NowTrade + Trading & Backtesting + 1012017-02-07 + + + +
78 + pinkfish + Trading & Backtesting + 2932025-05-12 + + + +
79 + PRISM-INSIGHT + Trading & Backtesting + 5052026-03-20 + + + +
80 + FinClaw + Trading & Backtesting + 152026-03-22 + + + +
81 + aat + Trading & Backtesting + 7802026-03-02 + + + +
82 + Backtesting.py + Trading & Backtesting + + + +
83 + catalyst + Trading & Backtesting + 2.6k2021-09-22 + + + +
84 + quantstats + Trading & Backtesting + 6.9k2026-01-13 + + + +
85 + qtpylib + Trading & Backtesting + 2.3k2021-03-24 + + + +
86 + Quantdom + Trading & Backtesting + 7612019-03-12 + + + +
87 + freqtrade + Trading & Backtesting + 47.9k2026-03-22 + + + +
88 + algorithmic-trading-with-python + Trading & Backtesting + 3.3k2021-06-01 + + + +
89 + DeepDow + Trading & Backtesting + 1.1k2024-01-24 + + + +
90 + Qlib + Trading & Backtesting + 39.2k2026-03-10 + + + +
91 + machine-learning-for-trading + Trading & Backtesting + 16.8k2023-03-05 + + + +
92 + AlphaPy + Trading & Backtesting + 1.7k2025-08-24 + + + +
93 + jesse + Trading & Backtesting + 7.6k2026-03-21 + + + +
94 + rqalpha + Trading & Backtesting + 6.2k2026-03-11 + + + +
95 + FinRL-Library + Trading & Backtesting + 14.3k2026-03-21 + + + +
96 + bulbea + Trading & Backtesting + 2.3k2017-03-19 + + + +
97 + ib_nope + Trading & Backtesting + 332021-04-22 + + + +
98 + OctoBot + Trading & Backtesting + 5.5k2026-03-17 + + + +
99 + OpenFinClaw + Trading & Backtesting + 1202026-03-22 + + + +
100 + bta-lib + Trading & Backtesting + 4922020-03-11 + + + +
101 + Stock-Prediction-Models + Trading & Backtesting + 9.3k2021-01-05 + + + +
102 + TuneTA + Trading & Backtesting + 4572023-10-13 + + + +
103 + AutoTrader + Trading & Backtesting + 1.2k2025-05-04 + + + +
104 + fast-trade + Trading & Backtesting + 5322026-03-11 + + + +
105 + qf-lib + Trading & Backtesting + 9022026-03-05 + + + +
106 + tda-api + Trading & Backtesting + 1.3k2024-06-16 + + + +
107 + vectorbt + Trading & Backtesting + 6.9k2026-03-19 + + + +
108 + Lean + Trading & Backtesting + 18k2026-03-14 + + + +
109 + fast-trade + Trading & Backtesting + 5322026-03-11 + + + +
110 + pysystemtrade + Trading & Backtesting + 3.2k2026-03-19 + + + +
111 + pytrendseries + Trading & Backtesting + 1632026-03-21 + + + +
112 + PyLOB + Trading & Backtesting + 1992023-01-01 + + + +
113 + PyBroker + Trading & Backtesting + 3.2k2026-03-05 + + + +
114 + OctoBot Script + Trading & Backtesting + 392026-03-04 + + + +
115 + hftbacktest + Trading & Backtesting + 3.8k2025-12-23 + + + +
116 + vnpy + Trading & Backtesting + 38.2k2026-01-14 + + + +
117 + Intelligent Trading Bot + Trading & Backtesting + 1.6k2026-02-28 + + + +
118 + fastquant + Trading & Backtesting + 1.7k2023-09-15 + + + +
119 + nautilus_trader + Trading & Backtesting + 21.4k2026-03-22 + + + +
120 + YABTE + Trading & Backtesting + 62024-05-11 + + + +
121 + Trading Strategy + Trading & Backtesting + 2072026-03-21 + + + +
122 + Hikyuu + Trading & Backtesting + 3.1k2026-03-22 + + + +
123 + rust_bt + Trading & Backtesting + 582026-01-05 + + + +
124 + Gunbot Quant + Trading & Backtesting + 422025-08-19 + + + +
125 + StrateQueue + Trading & Backtesting + 1702025-12-30 + + + +
126 + PythonTradingFramework + Trading & Backtesting + 272026-03-22 + + + +
127 + QTradeX-AI-Agents + Trading & Backtesting + 162025-05-25 + + + +
128 + QTradeX-Algo-Trading-SDK + Trading & Backtesting + 602026-01-13 + + + +
129 + antback + Trading & Backtesting + 152025-11-12 + + + +
130 + VARRD + Trading & Backtesting + 102026-03-09 + + + +
131 + polymarket-whales + Trading & Backtesting + 282026-03-20 + + + +
132 + QuantLibRisks + Risk Analysis + 192024-04-04 + + + +
133 + XAD + Risk Analysis + 192024-05-21 + + + +
134 + pyfolio + Risk Analysis + 6.3k2020-02-28 + + + +
135 + empyrical + Risk Analysis + 1.5k2020-10-14 + + + +
136 + fecon235 + Risk Analysis + 1.3k2018-12-03 + + + +
137 + finance + Risk Analysis + 2014-03-24 + + + +
138 + qfrm + Risk Analysis + 2015-12-12 + + + +
139 + visualize-wealth + Risk Analysis + 1462015-06-10 + + + +
140 + VisualPortfolio + Risk Analysis + 1072017-02-28 + + + +
141 + universal-portfolios + Risk Analysis + 8522025-09-11 + + + +
142 + FinQuant + Risk Analysis + 1.7k2023-09-03 + + + +
143 + Empyrial + Risk Analysis + 1.1k2025-09-14 + + + +
144 + risktools + Risk Analysis + 382024-12-07 + + + +
145 + Riskfolio-Lib + Risk Analysis + 3.8k2026-03-08 + + + +
146 + empyrical-reloaded + Risk Analysis + 1012025-07-29 + + + +
147 + pyfolio-reloaded + Risk Analysis + 5792025-06-02 + + + +
148 + fortitudo.tech + Risk Analysis + 2892026-02-19 + + + +
149 + quantitative-finance-tools + Risk Analysis + 42025-12-13 + + + +
150 + curistat + Risk Analysis + + + + +
151 + Prop Trader Compass + Risk Analysis + + + +
152 + alphalens + Factor Analysis + 4.2k2020-04-27 + + + +
153 + alphalens-reloaded + Factor Analysis + 5572025-06-02 + + + +
154 + Spectre + Factor Analysis + 7842025-04-15 + + + +
155 + quant-lab-alpha + Factor Analysis + 272026-03-15 + + + +
156 + Asset News Sentiment Analyzer + Sentiment Analysis + 1932024-07-27 + + + +
157 + Social Stock Sentiment API + Sentiment Analysis + + + +
158 + Jupyter Quant + Quant Research Environment + 192024-06-14 + + + +
159 + ARCH + Time Series + 1.5k2026-03-09 + + + +
160 + statsmodels + Time Series + 11.3k2026-03-19 + + + +
161 + dynts + Time Series + 872016-11-02 + + + +
162 + PyFlux + Time Series + 2.1k2018-12-16 + + + +
163 + tsfresh + Time Series + 9.2k2025-11-15 + + + +
164 + Facebook Prophet + Time Series + 20.1k2026-02-02 + + + +
165 + tsmoothie + Time Series + 7692023-11-23 + + + +
166 + pmdarima + Time Series + 1.7k2025-11-17 + + + +
167 + gluon-ts + Time Series + 5.1k2026-03-17 + + + +
168 + functime + Time Series + 1.2k2024-06-15 + + + +
169 + exchange_calendars + Calendars + 6072026-01-19 + + + +
170 + bizdays + Calendars + 892026-03-08 + + + +
171 + pandas_market_calendars + Calendars + 9582026-03-12 + + + +
172 + Polymarket Scanner API + Data Sources + 12026-03-14 + + + +
173 + yfinance + Data Sources + 22.3k2026-03-19 + + + +
174 + defeatbeta-api + Data Sources + 5192026-03-19 + + + +
175 + findatapy + Data Sources + 2k2026-03-20 + + + +
176 + googlefinance + Data Sources + 8182018-09-23 + + + +
177 + yahoo-finance + Data Sources + 1.4k2021-12-15 + + + +
178 + pandas-datareader + Data Sources + 3.2k2025-04-03 + + + +
179 + pandas-finance + Data Sources + 1602025-03-07 + + + +
180 + pyhoofinance + Data Sources + 92016-10-07 + + + +
181 + yfinanceapi + Data Sources + 92020-05-26 + + + +
182 + yql-finance + Data Sources + 162015-08-29 + + + +
183 + ystockquote + Data Sources + 5372017-03-10 + + + +
184 + wallstreet + Data Sources + 1.6k2024-03-09 + + + +
185 + stock_extractor + Data Sources + 512016-09-10 + + + +
186 + Stockex + Data Sources + 332021-09-15 + + + +
187 + SwapAPI + Data Sources + 2026-03-17 + + + +
188 + finsymbols + Data Sources + 1232017-07-23 + + + +
189 + FRB + Data Sources + 1802018-12-22 + + + +
190 + inquisitor + Data Sources + 562019-10-10 + + + +
191 + yfi + Data Sources + 22016-02-12 + + + +
192 + chinesestockapi + Data Sources + 2015-03-21 + + + +
193 + exchange + Data Sources + 182015-07-07 + + + +
194 + ticks + Data Sources + 162016-01-08 + + + +
195 + pybbg + Data Sources + 532015-01-20 + + + +
196 + ccy + Data Sources + 952025-12-28 + + + +
197 + tushare + Data Sources + 2024-08-27 + + + +
198 + edinet-mcp + Data Sources + 42026-03-02 + + + +
199 + estat-mcp + Data Sources + 2026-03-02 + + + +
200 + tdnet-disclosure-mcp + Data Sources + 12026-03-02 + + + +
201 + cn_stock_src + Data Sources + 342016-02-29 + + + +
202 + coinmarketcap + Data Sources + 4352023-05-23 + + + +
203 + coinpulse + Data Sources + 12026-01-09 + + + +
204 + after-hours + Data Sources + 382020-06-22 + + + +
205 + bronto-python + Data Sources + 2015-02-27 + + + + +
206 + pytdx + Data Sources + 1.5k2020-04-15 + + + +
207 + pdblp + Data Sources + 2552024-12-14 + + + +
208 + tiingo + Data Sources + 3032025-06-22 + + + +
209 + iexfinance + Data Sources + 6502021-01-02 + + + +
210 + pyEX + Data Sources + 4092024-02-05 + + + +
211 + alpaca-trade-api + Data Sources + 1.9k2024-01-12 + + + +
212 + metatrader5 + Data Sources + 2026-02-20 + + + +
213 + akshare + Data Sources + 17.6k2026-03-22 + + + +
214 + yahooquery + Data Sources + 9002025-05-15 + + + +
215 + investpy + Data Sources + 1.8k2022-10-02 + + + +
216 + yliveticker + Data Sources + 1632021-04-29 + + + +
217 + bbgbridge + Data Sources + 22020-01-07 + + + +
218 + polygon.io + Data Sources + 1.4k2026-03-05 + + + +
219 + alpha_vantage + Data Sources + 4.7k2026-03-03 + + + +
220 + oilpriceapi + Data Sources + 2026-03-18 + + + +
221 + FinanceDataReader + Data Sources + 1.4k2026-03-11 + + + +
222 + pystlouisfed + Data Sources + 212024-01-09 + + + +
223 + python-bcb + Data Sources + 1092026-02-27 + + + +
224 + swiss-finance-data + Data Sources + 2026-03-11 + + + +
225 + market-prices + Data Sources + 952026-02-05 + + + +
226 + tardis-python + Data Sources + 1402026-02-26 + + + +
227 + lake-api + Data Sources + 632025-11-02 + + + +
228 + tessa + Data Sources + 532026-01-16 + + + +
229 + pandaSDMX + Data Sources + 1332023-02-25 + + + +
230 + cif + Data Sources + 642022-06-18 + + + +
231 + finagg + Data Sources + 5252026-03-22 + + + +
232 + FinanceDatabase + Data Sources + 7.2k2026-03-22 + + + +
233 + Trading Strategy + Data Sources + + + + +
234 + datamule-python + Data Sources + 5192026-03-19 + + + +
235 + fsynth + Data Sources + 42025-12-27 + + + +
236 + fedfred + Data Sources + + + +
237 + edgar-sec + Data Sources + + + +
238 + edgartools + Data Sources + 1.9k2026-03-20 + + + +
239 + FXMacroData + Data Sources + 32026-01-17 + + + +
240 + wallstreet + Data Sources + 1.6k2024-03-09 + + + +
241 + xlwings + Excel Integration + 3.3k2026-03-22 + + + +
242 + openpyxl + Excel Integration + + + +
243 + xlrd + Excel Integration + 2.2k2025-06-14 + + + +
244 + xlsxwriter + Excel Integration + 3.9k2026-03-22 + + + +
245 + xlwt + Excel Integration + 1k2018-09-16 + + + +
246 + xlloop + Excel Integration + 1102018-03-10 + + + +
247 + expy + Excel Integration + + + +
248 + pyxll + Excel Integration + + + +
249 + D-Tale + Visualization + 5.1k2026-03-03 + + + +
250 + mplfinance + Visualization + 4.3k2024-04-02 + + + +
251 + finplot + Visualization + 1.1k2026-02-27 + + + +
252 + finvizfinance + Visualization + 1.3k2026-01-03 + + + +
253 + market-analy + Visualization + 752026-03-05 + + + +
254 + QuantInvestStrats + Visualization + 5212026-03-22 + + + +
255 + xts + Numerical Libraries & Data Structures + 2222026-02-27 + + + +
256 + data.table + Numerical Libraries & Data Structures + 3.9k2026-03-15 + + + +
257 + sparseEigen + Numerical Libraries & Data Structures + 122018-12-22 + + + +
258 + TSdbi + Numerical Libraries & Data Structures + + + +
259 + tseries + Numerical Libraries & Data Structures + 2026-02-18 + + + +
260 + zoo + Numerical Libraries & Data Structures + 2025-12-15 + + + +
261 + tis + Numerical Libraries & Data Structures + 2021-09-28 + + + +
262 + tfplot + Numerical Libraries & Data Structures + + + + +
263 + tframe + Numerical Libraries & Data Structures + 2019-05-30 + + + +
264 + IBrokers + Data Sources + 2022-11-16 + + + +
265 + Rblpapi + Data Sources + 1752026-01-10 + + + +
266 + Rbitcoin + Data Sources + 572016-10-25 + + + +
267 + GetTDData + Data Sources + 262025-05-19 + + + +
268 + GetHFData + Data Sources + 412020-06-30 + + + +
269 + td + Data Sources + 182026-02-12 + + + +
270 + rbcb + Data Sources + 992024-01-23 + + + +
271 + rb3 + Data Sources + + + + +
272 + simfinapi + Data Sources + 212025-08-13 + + + +
273 + tidyfinance + Data Sources + 202026-03-16 + + + +
274 + RQuantLib + Financial Instruments and Pricing + 1312026-03-09 + + + +
275 + quantmod + Financial Instruments and Pricing + 8842025-08-07 + + + + +
276 + Rmetrics + Financial Instruments and Pricing + + + +
277 + fAsianOptions + Financial Instruments and Pricing + + + + +
278 + fAssets + Financial Instruments and Pricing + 2023-04-24 + + + +
279 + fBasics + Financial Instruments and Pricing + 2025-12-07 + + + +
280 + fBonds + Financial Instruments and Pricing + 2017-11-15 + + + +
281 + fExoticOptions + Financial Instruments and Pricing + + + + +
282 + fOptions + Financial Instruments and Pricing + + + + +
283 + fPortfolio + Financial Instruments and Pricing + 2023-04-25 + + + +
284 + portfolio + Financial Instruments and Pricing + 172024-08-19 + + + +
285 + sparseIndexTracking + Financial Instruments and Pricing + 592023-05-28 + + + +
286 + covFactorModel + Financial Instruments and Pricing + 382019-03-25 + + + +
287 + riskParityPortfolio + Financial Instruments and Pricing + 1212022-11-15 + + + +
288 + sde + Financial Instruments and Pricing + 2025-12-22 + + + +
289 + YieldCurve + Financial Instruments and Pricing + 2022-10-02 + + + +
290 + SmithWilsonYieldCurve + Financial Instruments and Pricing + 2024-07-12 + + + +
291 + ycinterextra + Financial Instruments and Pricing + + + + +
292 + AmericanCallOpt + Financial Instruments and Pricing + + + + +
293 + VarSwapPrice + Financial Instruments and Pricing + + + + +
294 + RND + Financial Instruments and Pricing + 2017-01-11 + + + +
295 + LSMonteCarlo + Financial Instruments and Pricing + 2013-09-23 + + + +
296 + OptHedging + Financial Instruments and Pricing + 2013-10-11 + + + +
297 + tvm + Financial Instruments and Pricing + 2023-08-30 + + + +
298 + OptionPricing + Financial Instruments and Pricing + 2023-09-16 + + + +
299 + credule + Financial Instruments and Pricing + 72015-08-05 + + + +
300 + derivmkts + Financial Instruments and Pricing + 352026-02-12 + + + + +
301 + FinCal + Financial Instruments and Pricing + 242025-10-30 + + + +
302 + r-quant + Financial Instruments and Pricing + 342014-02-19 + + + +
303 + options.studies + Financial Instruments and Pricing + 62015-12-17 + + + +
304 + PortfolioAnalytics + Financial Instruments and Pricing + 982026-03-19 + + + +
305 + fmbasics + Financial Instruments and Pricing + 122019-12-03 + + + +
306 + R-fixedincome + Financial Instruments and Pricing + 642025-05-10 + + + +
307 + backtest + Trading + 2015-09-17 + + + +
308 + pa + Trading + 2023-08-21 + + + +
309 + TTR + Trading + 3422026-02-28 + + + +
310 + QuantTools + Trading + + + +
311 + blotter + Trading + 1182024-12-13 + + + +
312 + quantstrat + Backtesting + 3012023-09-14 + + + +
313 + PerformanceAnalytics + Risk Analysis + 2352026-03-05 + + + +
314 + FactorAnalytics + Factor Analysis + 852024-12-12 + + + +
315 + Expected Returns + Factor Analysis + 562025-08-12 + + + +
316 + tseries + Time Series + 2026-02-18 + + + +
317 + fGarch + Time Series + 2025-12-12 + + + +
318 + timeSeries + Time Series + 2025-12-12 + + + +
319 + rugarch + Time Series + 312026-03-13 + + + +
320 + rmgarch + Time Series + 172025-08-31 + + + +
321 + tidypredict + Time Series + 32021-09-28 + + + +
322 + tidyquant + Time Series + 9002026-03-16 + + + +
323 + timetk + Time Series + 6392025-08-29 + + + +
324 + tibbletime + Time Series + 1772024-12-03 + + + +
325 + matrixprofile + Time Series + 3872022-11-25 + + + +
326 + garchmodels + Time Series + 352022-08-11 + + + +
327 + timeDate + Calendars + 2026-01-28 + + + +
328 + bizdays + Calendars + 572025-01-08 + + + +
329 + RunMat + Alternatives + 1942026-03-20 + + + +
330 + QUANTAXIS + FrameWorks + 10.1k2026-02-28 + + + +
331 + PROJ_Option_Pricing_Matlab + FrameWorks + 2082024-11-19 + + + +
332 + CcyConv.jl + + 252025-10-14 + + +
333 + CryptoExchangeAPIs.jl + + 302025-11-27 + + +
334 + Fastback.jl + + 192026-03-01 + + +
335 + Lucky.jl + + 262026-03-09 + + +
336 + QuantLib.jl + + 1432020-02-18 + + +
337 + Ito.jl + + 392017-03-21 + + +
338 + LightweightCharts.jl + + 482026-01-20 + + +
339 + TALib.jl + + 522017-08-22 + + +
340 + Miletus.jl + + 902023-12-07 + + +
341 + Temporal.jl + + 1012021-12-28 + + +
342 + Indicators.jl + + 2272022-12-06 + + +
343 + Strategems.jl + + 1672021-04-06 + + +
344 + TimeSeries.jl + + 3682026-01-26 + + +
345 + TechnicalIndicatorCharts.jl + + 62026-03-09 + + +
346 + MarketTechnicals.jl + + 1302021-07-12 + + +
347 + MarketData.jl + + 1632025-11-10 + + +
348 + OnlineTechnicalIndicators.jl + + 332026-01-06 + + +
349 + OnlinePortfolioAnalytics.jl + + 132026-01-06 + + +
350 + OnlineResamplers.jl + + 22026-01-06 + + +
351 + RiskPerf.jl + + 152026-02-02 + + +
352 + TimeFrames.jl + + 42026-03-09 + + +
353 + DataFrames.jl + + 1.8k2026-03-17 + + +
354 + TSFrames.jl + + 1002024-06-18 + + +
355 + TimeArrays.jl + + 382025-10-15 + + +
356 + Strata + + 9292026-03-11 + + +
357 + JQuantLib + + 1522016-02-26 + + +
358 + finmath.net + + 5582026-02-20 + + +
359 + quantcomponents + + 1692015-10-07 + + +
360 + DRIP + + + +
361 + ta4j + + 2.4k2026-03-15 + + +
362 + finance.js + + 1.3k2018-10-11 + + +
363 + portfolio-allocation + + 1872022-08-11 + + +
364 + Ghostfolio + + 8k2026-03-22 + + +
365 + IndicatorTS + + 4292025-02-26 + + +
366 + chart-patterns + + + + +
367 + orderflow + + 652025-03-31 + + +
368 + ccxt + + 41.5k2026-03-21 + + +
369 + SimpleFunctions + + 12026-03-21 + + +
370 + PENDAX + + 482024-05-09 + + +
371 + PreReason + + 2026-03-22 + + +
372 + pmxt + + 1.1k2026-03-22 + + +
373 + pmxt + + 1.1k2026-03-22 + + +
374 + rebalance + + 22026-03-01 + + +
375 + QUANTAXIS_Webkit + Data Visualization + 372017-07-30 + + + +
376 + quantfin + + 1392019-04-06 + + +
377 + Haxcel + + 372022-09-13 + + +
378 + Ffinar + + 52021-11-26 + + +
379 + QuantScale + + 502014-01-14 + + +
380 + Scala Quant + + 102017-05-06 + + +
381 + Jiji + + 2492019-01-22 + + +
382 + Tai + + 4932024-12-06 + + +
383 + Workbench + + 1212022-06-06 + + +
384 + Prop + + 552022-06-06 + + +
385 + Kelp + + 1.1k2021-11-26 + + +
386 + marketstore + + + + +
387 + IndicatorGo + + 8282026-03-02 + + +
388 + QuantLib + + 6.9k2026-03-17 + + +
389 + QuantLibRisks + + 382026-02-06 + + +
390 + XAD + + 4112026-02-06 + + +
391 + TradeFrame + + 6512026-03-05 + + +
392 + Hikyuu + + 3.1k2026-03-22 + + +
393 + OrderMatchingEngine + + 1282026-01-11 + + +
394 + PandoraTrader + + 1.4k2025-07-29 + + +
395 + NexusFix + + 112026-03-22 + + +
396 + QuantLib + + 6.9k2026-03-17 + + +
397 + JQuantLib + + 1522016-02-26 + + +
398 + RQuantLib + + 1312026-03-09 + + +
399 + QuantLibAddin + + + +
400 + QuantLibXL + + + +
401 + QLNet + + 4222026-03-10 + + +
402 + PyQL + + 1.3k2025-08-20 + + +
403 + QuantLib.jl + + 1432020-02-18 + + +
404 + QuantLib-Python Documentation + + + +
405 + TA-Lib + + 1.5k2025-10-19 + + +
406 + QuantConnect + + 18k2026-03-14 + + +
407 + StockSharp + + 9.3k2026-03-21 + + +
408 + TDAmeritrade.DotNetCore + + 562023-03-10 + + +
409 + QuantMath + + 4022020-05-28 + + +
410 + Barter + + 2k2026-03-05 + + +
411 + LFEST + + 772026-02-05 + + +
412 + TradeAggregation + + 1152026-02-05 + + +
413 + OpenFinClaw + + 1202026-03-22 + + +
414 + SlidingFeatures + + 722026-02-18 + + +
415 + RustQuant + + 1.7k2026-01-14 + + +
416 + fin-primitives + + 42026-03-21 + + +
417 + fin-stream + + 22026-03-21 + + +
418 + Special-Relativity-in-Financial-Modeling + + 42026-03-19 + + +
419 + finalytics + + 672026-02-17 + + +
420 + RunMat + + 1942026-03-20 + + +
421 + Auto-Differentiation Website + + + +
422 + Derman Papers + + 5072017-10-21 + + +
423 + volatility-trading + + 1.9k2024-10-21 + + +
424 + quant + + 4052015-07-14 + + +
425 + fecon235 + + 1.3k2018-12-03 + + +
426 + Quantitative-Notebooks + + 1.3k2020-07-02 + + +
427 + QuantEcon + + + +
428 + FinanceHub + + 7822021-05-25 + + +
429 + Python_Option_Pricing + + 8282025-05-13 + + +
430 + python-training + + 12.9k2023-11-27 + + +
431 + Stock_Analysis_For_Quant + + 2k2025-05-04 + + +
432 + algorithmic-trading-with-python + + 3.3k2021-06-01 + + +
433 + MEDIUM_NoteBook + + 2.1k2024-09-22 + + +
434 + QuantFinance + + 6052025-09-02 + + +
435 + IPythonScripts + + 1752026-02-28 + + +
436 + Computational-Finance-Course + + 4912024-03-01 + + +
437 + Machine-Learning-for-Asset-Managers + + 6152025-01-29 + + +
438 + Python-for-Finance-Cookbook + + 7852026-03-02 + + +
439 + modelos_vol_derivativos + + 592023-08-19 + + +
440 + NMOF + + 382025-10-27 + + +
441 + py4fi2nd + + 2.1k2025-06-06 + + +
442 + aiif + + 3852023-10-09 + + +
443 + py4at + + 8262023-10-09 + + +
444 + dawp + + 6332021-02-22 + + +
445 + dx + + 7672025-04-05 + + +
446 + QuantFinanceBook + + 8582025-04-14 + + +
447 + rough_bergomi + + 1412018-09-17 + + +
448 + frh-fx + + 132018-05-24 + + +
449 + Value Investing Studies + + 922021-10-26 + + +
450 + Machine Learning Asset Management + + 1.7k2021-12-17 + + +
451 + Deep Learning Machine Learning Stock + + 1.7k2024-03-01 + + +
452 + Technical Analysis and Feature Engineering + + 1982024-02-16 + + +
453 + Differential Machine Learning and Axes that matter by Brian Huge and Antoine Savine + + 1482022-10-05 + + +
454 + systematictradingexamples + + 4612020-07-22 + + +
455 + pysystemtrade_examples + + 2592018-02-21 + + +
456 + ML_Finance_Codes + + 2.5k2020-06-13 + + +
457 + Hands-On Machine Learning for Algorithmic Trading + + 1.8k2023-01-18 + + +
458 + financialnoob-misc + + 282024-08-26 + + +
459 + MesoSim Options Trading Strategy Library + + 202024-04-06 + + +
460 + Quant-Finance-With-Python-Code + + 1682026-01-15 + + +
461 + QuantFinanceTraining + + 402024-02-20 + + +
462 + Statistical-Learning-based-Portfolio-Optimization + + + + +
463 + book_irds3 + + 1142022-10-29 + + +
464 + Autoencoder-Asset-Pricing-Models + + 1402025-08-17 + + +
465 + Finance + + 3.7k2025-05-12 + + +
466 + 101_formulaic_alphas + + 452022-07-11 + + +
467 + Tidy Finance + + + +
468 + RoughVolatilityWorkshop + + 712025-09-06 + + +
469 + AFML + + 8102024-09-05 + + +
470 + AlgoTradingLib + + 282026-02-10 + + +
471 + Portfolio Optimization Book + + 252025-02-17 + + +
472 + Chartscout + + + +
473 + DayTradingBench + + + +
474 + CoinTester + + + +
475 + goMacro.ai + + + +
476 + StockAInsights + + + +
477 + brapi.dev + + + +
478 + 13F Insight + + + +
479 + Earnings Feed + + + +
480 + Financial Data + + + +
481 + Frostbyte + + + +
482 + SaxoOpenAPI + + + +
483 + RTPR + + + +
484 + Nasdaq Data Link + + + +
485 + Parsec + + + +
486 + Portfolio Optimizer + + + +
487 + Reddit WallstreetBets API + + + +
488 + System R + + + +
489 + Telonex + + + +
490 + ValueRay + + + +
491 + VertData + + + +
492 + KeepRule + + + +
493 + ML-Quant + + + +
494 + awesome-sec-filings + + 92026-02-14 + +
495 + CONVEXFI + + + +
+
+ + + +
+
+
+ +
+
+

Know a great project?

+

Contribute to the list by opening a pull request on GitHub.

+ Contribute on GitHub +
+
+
+ + + + + + \ No newline at end of file diff --git a/site/index.qmd b/site/index.qmd deleted file mode 100644 index 84540b9..0000000 --- a/site/index.qmd +++ /dev/null @@ -1,646 +0,0 @@ ---- -title: "Awesome Quant" -date-modified: last-modified -keywords: ["r packages", "python packages", "julia packages", - "software development", "software engineering", "financial computing", - "r", "python", "julia", "rust", "java"] -include-in-header: - - text: | - ---- - -A curated list of insanely awesome libraries, packages and resources for Quants (Quantitative Finance). - -[![](https://awesome.re/badge.svg)](https://awesome.re) - -## Python - -### Numerical Libraries & Data Structures - -- [numpy](https://www.numpy.org) - NumPy is the fundamental package for scientific computing with Python. [GitHub](https://github.com/numpy/numpy) -- [scipy](https://www.scipy.org) - SciPy (pronounced “Sigh Pie”) is a Python-based ecosystem of open-source software for mathematics, science, and engineering. [GitHub](https://github.com/scipy/scipy) -- [pandas](https://pandas.pydata.org) - pandas is an open source, BSD-licensed library providing high-performance, easy-to-use data structures and data analysis tools for the Python programming language. [GitHub](https://github.com/pandas-dev/pandas) -- [polars](https://docs.pola.rs/) - Polars is a blazingly fast DataFrame library for manipulating structured data. [GitHub](https://github.com/pola-rs/polars) -- [quantdsl](https://github.com/johnbywater/quantdsl) - Domain specific language for quantitative analytics in finance and trading. -- [statistics](https://docs.python.org/3/library/statistics.html) - Builtin Python library for all basic statistical calculations. -- [sympy](https://www.sympy.org/) - SymPy is a Python library for symbolic mathematics. [GitHub](https://github.com/sympy/sympy) -- [pymc3](https://docs.pymc.io/) - Probabilistic Programming in Python: Bayesian Modeling and Probabilistic Machine Learning with Theano. [GitHub](https://github.com/pymc-devs/pymc) -- [modelx](https://docs.modelx.io/) - Python reimagination of spreadsheets as formula-centric objects that are interoperable with pandas. [GitHub](https://github.com/fumitoh/modelx) -- [ArcticDB](https://github.com/man-group/ArcticDB) - High performance datastore for time series and tick data. -- [pmxt](https://github.com/pmxt-dev/pmxt) - The CCXT for prediction markets. A unified API for trading on Polymarket, Kalshi, and more. - -### Financial Instruments and Pricing - -- [OpenBB Terminal](https://github.com/OpenBB-finance/OpenBBTerminal) - Terminal for investment research for everyone. -- [Fincept Terminal](https://github.com/Fincept-Corporation/FinceptTerminal) - Advance Data Based A.I Terminal for all Types of Financial Asset Research. -- [PyQL](https://github.com/enthought/pyql) - QuantLib's Python port. -- [pyfin](https://github.com/opendoor-labs/pyfin) - Basic options pricing in Python. *ARCHIVED* -- [vollib](https://github.com/vollib/vollib) - vollib is a python library for calculating option prices, implied volatility and greeks. -- [QuantPy](https://github.com/jsmidt/QuantPy) - A framework for quantitative finance In python. -- [Finance-Python](https://github.com/alpha-miner/Finance-Python) - Python tools for Finance. -- [ffn](https://github.com/pmorissette/ffn) - A financial function library for Python. -- [pynance](https://github.com/GriffinAustin/pynance) - Lightweight Python library for assembling and analyzing financial data. -- [tia](https://github.com/bpsmith/tia) - Toolkit for integration and analysis. -- [pysabr](https://github.com/ynouri/pysabr) - SABR model Python implementation. -- [FinancePy](https://github.com/domokane/FinancePy) - A Python Finance Library that focuses on the pricing and risk-management of Financial Derivatives, including fixed-income, equity, FX and credit derivatives. -- [gs-quant](https://github.com/goldmansachs/gs-quant) - Python toolkit for quantitative finance -- [willowtree](https://github.com/federicomariamassari/willowtree) - Robust and flexible Python implementation of the willow tree lattice for derivatives pricing. -- [financial-engineering](https://github.com/federicomariamassari/financial-engineering) - Applications of Monte Carlo methods to financial engineering projects, in Python. -- [optlib](https://github.com/dbrojas/optlib) - A library for financial options pricing written in Python. -- [tf-quant-finance](https://github.com/google/tf-quant-finance) - High-performance TensorFlow library for quantitative finance. -- [Q-Fin](https://github.com/RomanMichaelPaolucci/Q-Fin) - A Python library for mathematical finance. -- [Quantsbin](https://github.com/quantsbin/Quantsbin) - Tools for pricing and plotting of vanilla option prices, greeks and various other analysis around them. -- [finoptions](https://github.com/bbcho/finoptions-dev) - Complete python implementation of R package fOptions with partial implementation of fExoticOptions for pricing various options. -- [pypme](https://github.com/ymyke/pypme) - PME (Public Market Equivalent) calculation. -- [AbsBox](https://github.com/yellowbean/AbsBox) - A Python based library to model cashflow for structured product like Asset-backed securities (ABS) and Mortgage-backed securities (MBS). -- [Intrinsic-Value-Calculator](https://github.com/akashaero/Intrinsic-Value-Calculator) - A Python tool for quick calculations of a stock's fair value using Discounted Cash Flow analysis. -- [Kelly-Criterion](https://github.com/deltaray-io/kelly-criterion) - Kelly Criterion implemented in Python to size portfolios based on J. L. Kelly Jr's formula. -- [rateslib](https://github.com/attack68/rateslib) - A fixed income library for pricing bonds and bond futures, and derivatives such as IRS, cross-currency and FX swaps. -- [fypy](https://github.com/jkirkby3/fypy) - Vanilla and exotic option pricing library to support quantitative R&D. Focus on pricing interesting/useful models and contracts (including and beyond Black-Scholes), as well as calibration of financial models to market data. -- [quantra](https://github.com/joseprupi/quantraserver) High-performance pricing engine built on QuantLib. It exposes QuantLib's functionality through gRPC and REST APIs, enabling distributed computations with FlatBuffers serialization. -- [optionlab](https://github.com/rgaveiga/optionlab) - A Python library for evaluating option trading strategies. - -### Indicators - -- [pandas_talib](https://github.com/femtotrader/pandas_talib) - A Python Pandas implementation of technical analysis indicators. -- [finta](https://github.com/peerchemist/finta) - Common financial technical analysis indicators implemented in Pandas. -- [Tulipy](https://github.com/cirla/tulipy) - Financial Technical Analysis Indicator Library (Python bindings for [tulipindicators](https://github.com/TulipCharts/tulipindicators)) -- [lppls](https://github.com/Boulder-Investment-Technologies/lppls) - A Python module for fitting the [Log-Periodic Power Law Singularity (LPPLS)](https://en.wikipedia.org/wiki/Didier_Sornette#The_JLS_and_LPPLS_models) model. -- [talipp](https://github.com/nardew/talipp) - Incremental technical analysis library for Python. -- [streaming_indicators](https://github.com/mr-easy/streaming_indicators) - A python library for computing technical analysis indicators on streaming data. - -### Trading & Backtesting -- [the0](https://github.com/alexanderwanyoike/the0) - Self-hosted execution engine for algorithmic trading bots. Write strategies in Python, TypeScript, Rust, C++, C#, Scala, or Haskell and deploy with one command. Each bot runs in an isolated container with scheduled or streaming execution. -- [skfolio](https://github.com/skfolio/skfolio) - Python library for portfolio optimization built on top of scikit-learn. It provides a unified interface and sklearn compatible tools to build, tune and cross-validate portfolio models. -- [Investing algorithm framework](https://github.com/coding-kitties/investing-algorithm-framework) - Framework for developing, backtesting, and deploying automated trading algorithms. -- [QSTrader](https://github.com/mhallsmoore/qstrader) - QSTrader backtesting simulation engine. -- [Blankly](https://github.com/Blankly-Finance/Blankly) - Fully integrated backtesting, paper trading, and live deployment. -- [TA-Lib](https://github.com/mrjbq7/ta-lib) - Python wrapper for TA-Lib (). -- [zipline](https://github.com/quantopian/zipline) - Pythonic algorithmic trading library. -- [zipline-reloaded](https://github.com/stefan-jansen/zipline-reloaded) - Zipline, a Pythonic Algorithmic Trading Library. -- [QuantSoftware Toolkit](https://github.com/QuantSoftware/QuantSoftwareToolkit) - Python-based open source software framework designed to support portfolio construction and management. -- [quantitative](https://github.com/jeffrey-liang/quantitative) - Quantitative finance, and backtesting library. -- [analyzer](https://github.com/llazzaro/analyzer) - Python framework for real-time financial and backtesting trading strategies. -- [bt](https://github.com/pmorissette/bt) - Flexible Backtesting for Python. -- [backtrader](https://github.com/backtrader/backtrader) - Python Backtesting library for trading strategies. -- [pythalesians](https://github.com/thalesians/pythalesians) - Python library to backtest trading strategies, plot charts, seamlessly download market data, analyze market patterns etc. -- [pybacktest](https://github.com/ematvey/pybacktest) - Vectorized backtesting framework in Python / pandas, designed to make your backtesting easier. -- [pyalgotrade](https://github.com/gbeced/pyalgotrade) - Python Algorithmic Trading Library. -- [basana](https://github.com/gbeced/basana) - A Python async and event driven framework for algorithmic trading, with a focus on crypto currencies. -- [ta](https://github.com/bukosabino/ta) - Technical Analysis Library using Pandas (Python) -- [algobroker](https://github.com/joequant/algobroker) - This is an execution engine for algo trading. -- [finmarketpy](https://github.com/cuemacro/finmarketpy) - Python library for backtesting trading strategies and analyzing financial markets. -- [binary-martingale](https://github.com/metaperl/binary-martingale) - Computer program to automatically trade binary options martingale style. -- [fooltrader](https://github.com/foolcage/fooltrader) - the project using big-data technology to provide an uniform way to analyze the whole market. -- [zvt](https://github.com/zvtvz/zvt) - the project using sql, pandas to provide an uniform and extendable way to record data, computing factors, select securities, backtesting, realtime trading and it could show all of them in clearly charts in realtime. -- [pylivetrader](https://github.com/alpacahq/pylivetrader) - zipline-compatible live trading library. -- [pipeline-live](https://github.com/alpacahq/pipeline-live) - zipline's pipeline capability with IEX for live trading. -- [zipline-extensions](https://github.com/quantrocket-llc/zipline-extensions) - Zipline extensions and adapters for QuantRocket. -- [moonshot](https://github.com/quantrocket-llc/moonshot) - Vectorized backtester and trading engine for QuantRocket based on Pandas. -- [PyPortfolioOpt](https://github.com/robertmartin8/PyPortfolioOpt) - Financial portfolio optimization in python, including classical efficient frontier and advanced methods. -- [Eiten](https://github.com/tradytics/eiten) - Eiten is an open source toolkit by Tradytics that implements various statistical and algorithmic investing strategies such as Eigen Portfolios, Minimum Variance Portfolios, Maximum Sharpe Ratio Portfolios, and Genetic Algorithms based Portfolios. -- [riskparity.py](https://github.com/dppalomar/riskparity.py) - fast and scalable design of risk parity portfolios with TensorFlow 2.0 -- [mlfinlab](https://github.com/hudson-and-thames/mlfinlab) - Implementations regarding "Advances in Financial Machine Learning" by Marcos Lopez de Prado. (Feature Engineering, Financial Data Structures, Meta-Labeling) -- [pyqstrat](https://github.com/abbass2/pyqstrat) - A fast, extensible, transparent python library for backtesting quantitative strategies. -- [NowTrade](https://github.com/edouardpoitras/NowTrade) - Python library for backtesting technical/mechanical strategies in the stock and currency markets. -- [pinkfish](https://github.com/fja05680/pinkfish) - A backtester and spreadsheet library for security analysis. -- [PRISM-INSIGHT](https://github.com/dragon1086/prism-insight) - AI-powered stock analysis system with 13 specialized agents, automated trading via KIS API, supporting Korean & US markets. -- [FinClaw](https://github.com/NeuZhou/finclaw) - AI-powered financial intelligence engine with 8 master strategies across US, CN, and HK markets. Multi-agent architecture with +29.1% annual alpha. 227 tests. -- [aat](https://github.com/timkpaine/aat) - Async Algorithmic Trading Engine -- [Backtesting.py](https://kernc.github.io/backtesting.py/) - Backtest trading strategies in Python -- [catalyst](https://github.com/enigmampc/catalyst) - An Algorithmic Trading Library for Crypto-Assets in Python -- [quantstats](https://github.com/ranaroussi/quantstats) - Portfolio analytics for quants, written in Python -- [qtpylib](https://github.com/ranaroussi/qtpylib) - QTPyLib, Pythonic Algorithmic Trading -- [Quantdom](https://github.com/constverum/Quantdom) - Python-based framework for backtesting trading strategies & analyzing financial markets [GUI :neckbeard:] -- [freqtrade](https://github.com/freqtrade/freqtrade) - Free, open source crypto trading bot -- [algorithmic-trading-with-python](https://github.com/chrisconlan/algorithmic-trading-with-python) - Free `pandas` and `scikit-learn` resources for trading simulation, backtesting, and machine learning on financial data. -- [DeepDow](https://github.com/jankrepl/deepdow) - Portfolio optimization with deep learning -- [Qlib](https://github.com/microsoft/qlib) - An AI-oriented Quantitative Investment Platform by Microsoft. Full ML pipeline of data processing, model training, back-testing; and covers the entire chain of quantitative investment: alpha seeking, risk modeling, portfolio optimization, and order execution. -- [machine-learning-for-trading](https://github.com/stefan-jansen/machine-learning-for-trading) - Code and resources for Machine Learning for Algorithmic Trading -- [AlphaPy](https://github.com/ScottfreeLLC/AlphaPy) - Automated Machine Learning [AutoML] with Python, scikit-learn, Keras, XGBoost, LightGBM, and CatBoost -- [jesse](https://github.com/jesse-ai/jesse) - An advanced crypto trading bot written in Python -- [rqalpha](https://github.com/ricequant/rqalpha) - A extendable, replaceable Python algorithmic backtest && trading framework supporting multiple securities. -- [FinRL-Library](https://github.com/AI4Finance-LLC/FinRL-Library) - A Deep Reinforcement Learning Library for Automated Trading in Quantitative Finance. NeurIPS 2020. -- [bulbea](https://github.com/achillesrasquinha/bulbea) - Deep Learning based Python Library for Stock Market Prediction and Modelling. -- [ib_nope](https://github.com/ajhpark/ib_nope) - Automated trading system for NOPE strategy over IBKR TWS. -- [OctoBot](https://github.com/Drakkar-Software/OctoBot) - Open source cryptocurrency trading bot for high frequency, arbitrage, TA and social trading with an advanced web interface. -- [OpenFinClaw](https://github.com/cryptoSUN2049/openFinclaw) - AI-native hedge fund platform: natural language strategy generation, Rust backtesting engine, multi-market execution, and self-evolving strategy pipeline with community leaderboard. -- [bta-lib](https://github.com/mementum/bta-lib) - Technical Analysis library in pandas for backtesting algotrading and quantitative analysis. -- [Stock-Prediction-Models](https://github.com/huseinzol05/Stock-Prediction-Models) - Gathers machine learning and deep learning models for Stock forecasting including trading bots and simulations. -- [TuneTA](https://github.com/jmrichardson/tuneta) - TuneTA optimizes technical indicators using a distance correlation measure to a user defined target feature such as next day return. -- [AutoTrader](https://github.com/kieran-mackle/AutoTrader) - A Python-based development platform for automated trading systems - from backtesting to optimization to livetrading. -- [fast-trade](https://github.com/jrmeier/fast-trade) - A library built with backtest portability and performance in mind for backtest trading strategies. -- [qf-lib](https://github.com/quarkfin/qf-lib) - QF-Lib is a Python library that provides high quality tools for quantitative finance. -- [tda-api](https://github.com/alexgolec/tda-api) - Gather data and trade equities, options, and ETFs via TDAmeritrade. -- [vectorbt](https://github.com/polakowo/vectorbt) - Find your trading edge, using a powerful toolkit for backtesting, algorithmic trading, and research. -- [Lean](https://github.com/QuantConnect/Lean) - Lean Algorithmic Trading Engine by QuantConnect (Python, C#). -- [fast-trade](https://github.com/jrmeier/fast-trade) - Low code backtesting library utilizing pandas and technical analysis indicators. -- [pysystemtrade](https://github.com/robcarver17/pysystemtrade) - pysystemtrade is the open source version of Robert Carver's backtesting and trading engine that implements systems according to the framework outlined in his book "Systematic Trading", which is further developed on his [blog](https://qoppac.blogspot.com/). -- [pytrendseries](https://github.com/rafa-rod/pytrendseries) - Detect trend in time series, drawdown, drawdown within a constant look-back window , maximum drawdown, time underwater. -- [PyLOB](https://github.com/DrAshBooth/PyLOB) - Fully functioning fast Limit Order Book written in Python. -- [PyBroker](https://github.com/edtechre/pybroker) - Algorithmic Trading with Machine Learning. -- [OctoBot Script](https://github.com/Drakkar-Software/OctoBot-Script) - A quant framework to create cryptocurrencies strategies - from backtesting to optimization to livetrading. -- [hftbacktest](https://github.com/nkaz001/hftbacktest) - A high-frequency trading and market-making backtesting tool accounts for limit orders, queue positions, and latencies, utilizing full tick data for trades and order books. -- [vnpy](https://github.com/vnpy/vnpy) - VeighNa is a Python-based open source quantitative trading system development framework. -- [Intelligent Trading Bot](https://github.com/asavinov/intelligent-trading-bot) - Automatically generating signals and trading based on machine learning and feature engineering -- [fastquant](https://github.com/enzoampil/fastquant) - fastquant allows you to easily backtest investment strategies with as few as 3 lines of python code. -- [nautilus_trader](https://github.com/nautechsystems/nautilus_trader) - A high-performance algorithmic trading platform and event-driven backtester. -- [YABTE](https://github.com/bsdz/yabte) - Yet Another (Python) BackTesting Engine. -- [Trading Strategy](https://github.com/tradingstrategy-ai/getting-started) - TradingStrategy.ai is a market data, backtesting, live trading and investor management framework for decentralised finance -- [Hikyuu](https://github.com/fasiondog/hikyuu) - A base on Python/C++ open source high-performance quant framework for faster analysis and backtesting, contains the complete trading system components for reuse and combination. -- [rust_bt](https://github.com/jensnesten/rust_bt) - A high performance, low-latency backtesting engine for testing quantitative trading strategies on historical and live data in Rust. -- [Gunbot Quant](https://github.com/GuntharDeNiro/gunbot-quant) - Toolkit for quantitative trading analysis. It integrates an advanced market screener, a multi-strategy, multi-asset backtesting engine. Use with built-in GUI or through CLI. -- [StrateQueue](https://github.com/StrateQueue/StrateQueue) - An open‑source, broker‑agnostic Python library that lets you seamlessly deploy strategies from any major backtesting engine to live (or paper) trading with zero code changes and built‑in safety controls. -- [PythonTradingFramework](https://github.com/JustinGuese/python_tradingbot_framework) ![Github last commit (branch)](https://img.shields.io/github/last-commit/JustinGuese/python_tradingbot_framework/main) - Python algorithmic trading bot framework for Kubernetes: backtesting, hyperparameter optimization, 150+ technical analysis indicators (RSI, MACD, Bollinger Bands, ADX), portfolio management, PostgreSQL integration, Helm deployment, CronJob scheduling. Minimal overhead, production-ready, Yahoo Finance data. -- [QTradeX-AI-Agents](https://github.com/squidKid-deluxe/QTradeX-AI-Agents) - Example strategies for the QTradeX platfrom. -- [QTradeX-Algo-Trading-SDK](https://github.com/squidKid-deluxe/QTradeX-Algo-Trading-SDK) - AI-powered SDK featuring algorithmic trading, backtesting, deployment on 100+ exchanges, and multiple optimization engines. -- [antback](https://github.com/ts-kontakt/antback) - A lightweight, event-loop-style backtest engine that allows a function-driven imperative style using efficient stateful helper functions and data containers. -- [VARRD](https://github.com/augiemazza/varrd) - AI-powered trading edge discovery platform that validates trading ideas with event studies, statistical tests, and real market data. Web app, MCP server, CLI (`pip install varrd`), and Python SDK. -- [polymarket-whales](https://github.com/al1enjesus/polymarket-whales) - Real-time whale trade tracker for Polymarket — terminal alerts + Telegram notifications when large orders hit the book. - -### Risk Analysis - -- [QuantLibRisks](https://github.com/auto-differentiation/QuantLib-Risks-Py) - Fast risks with QuantLib -- [XAD](https://github.com/auto-differentiation/xad-py) - Automatic Differentation (AAD) Library -- [pyfolio](https://github.com/quantopian/pyfolio) - Portfolio and risk analytics in Python. -- [empyrical](https://github.com/quantopian/empyrical) - Common financial risk and performance metrics. -- [fecon235](https://github.com/rsvp/fecon235) - Computational tools for financial economics include: Gaussian Mixture model of leptokurtotic risk, adaptive Boltzmann portfolios. -- [finance](https://pypi.org/project/finance/) - Financial Risk Calculations. Optimized for ease of use through class construction and operator overload. -- [qfrm](https://pypi.org/project/qfrm/) - Quantitative Financial Risk Management: awesome OOP tools for measuring, managing and visualizing risk of financial instruments and portfolios. (Last updated: 2015-12-12) -- [visualize-wealth](https://github.com/benjaminmgross/visualize-wealth) - Portfolio construction and quantitative analysis. -- [VisualPortfolio](https://github.com/wegamekinglc/VisualPortfolio) - This tool is used to visualize the performance of a portfolio. -- [universal-portfolios](https://github.com/Marigold/universal-portfolios) - Collection of algorithms for online portfolio selection. -- [FinQuant](https://github.com/fmilthaler/FinQuant) - A program for financial portfolio management, analysis and optimization. -- [Empyrial](https://github.com/ssantoshp/Empyrial) - Portfolio's risk and performance analytics and returns predictions. -- [risktools](https://github.com/bbcho/risktools-dev) - Risk tools for use within the crude and crude products trading space with partial implementation of R's PerformanceAnalytics. -- [Riskfolio-Lib](https://github.com/dcajasn/Riskfolio-Lib) - Portfolio Optimization and Quantitative Strategic Asset Allocation in Python. -- [empyrical-reloaded](https://github.com/stefan-jansen/empyrical-reloaded) - Common financial risk and performance metrics. [empyrical](https://github.com/quantopian/empyrical) fork. -- [pyfolio-reloaded](https://github.com/stefan-jansen/pyfolio-reloaded) - Portfolio and risk analytics in Python. [pyfolio](https://github.com/quantopian/pyfolio) fork. -- [fortitudo.tech](https://github.com/fortitudo-tech/fortitudo.tech) - Conditional Value-at-Risk (CVaR) portfolio optimization and Entropy Pooling views / stress-testing in Python. -- [Quant Lab Alpha](https://github.com/husainm97/quant-lab-alpha) — Portfolio risk decomposition and Monte Carlo simulation toolkit with factor-based modeling. -- [quantitative-finance-tools](https://github.com/omichauhan-lgtm/quantitative-finance-tools) - Library for portfolio optimization (MVO) and rigorous risk metrics (VaR/CVaR). -- [curistat](https://github.com/moxiespirit/MyClone/tree/main/volatility_platform) - Futures volatility forecasting platform for ES/NQ. Proprietary CVN rating (1-10), regime detection (CRC composite), 8 directional signals, economic event impact analytics. Includes MCP server for AI agent integration. -- [Prop Trader Compass](https://otto-ships.github.io/prop-trader-compass/) - Interactive risk and payout calculator for Futures and CFD traders; features one-time fee firm comparisons. - -### Factor Analysis - -- [alphalens](https://github.com/quantopian/alphalens) - Performance analysis of predictive alpha factors. -- [alphalens-reloaded](https://github.com/stefan-jansen/alphalens-reloaded) - Performance analysis of predictive (alpha) stock factors. -- [Spectre](https://github.com/Heerozh/spectre) - GPU-accelerated Factors analysis library and Backtester -- [quant-lab-alpha](https://github.com/husainm97/quant-lab-alpha) - Open-source investment analytics platform bridging academic research and retail finance. - -### Sentiment Analysis -- [Asset News Sentiment Analyzer](https://github.com/KVignesh122/AssetNewsSentimentAnalyzer) - Sentiment analysis and report generation package for financial assets and securities utilizing GPT models. -- [Social Stock Sentiment API](https://api.adanos.org/docs) - REST API analyzing Reddit and X/Twitter for stock mentions and sentiment, providing buzz scores, trending stocks, and AI-generated trend explanations. - -### Quant Research Environment - -- [Jupyter Quant](https://github.com/gnzsnz/jupyter-quant) - A dockerized Jupyter quant research environment with preloaded tools for quant analysis, statsmodels, pymc, arch, py_vollib, zipline-reloaded, PyPortfolioOpt, etc. - -### Time Series - -- [ARCH](https://github.com/bashtage/arch) - ARCH models in Python. -- [statsmodels](http://statsmodels.sourceforge.net) - Python module that allows users to explore data, estimate statistical models, and perform statistical tests. [GitHub](https://github.com/statsmodels/statsmodels) -- [dynts](https://github.com/quantmind/dynts) - Python package for timeseries analysis and manipulation. -- [PyFlux](https://github.com/RJT1990/pyflux) - Python library for timeseries modelling and inference (frequentist and Bayesian) on models. -- [tsfresh](https://github.com/blue-yonder/tsfresh) - Automatic extraction of relevant features from time series. -- [Facebook Prophet](https://github.com/facebook/prophet) - Tool for producing high quality forecasts for time series data that has multiple seasonality with linear or non-linear growth. -- [tsmoothie](https://github.com/cerlymarco/tsmoothie) - A python library for time-series smoothing and outlier detection in a vectorized way. -- [pmdarima](https://github.com/alkaline-ml/pmdarima) - A statistical library designed to fill the void in Python's time series analysis capabilities, including the equivalent of R's auto.arima function. -- [gluon-ts](https://github.com/awslabs/gluon-ts) - vProbabilistic time series modeling in Python. -- [functime](https://github.com/functime-org/functime) - Time-series machine learning at scale. Built with Polars for embarrassingly parallel feature extraction and forecasts on panel data. - -### Calendars - -- [exchange_calendars](https://github.com/gerrymanoim/exchange_calendars) - Stock Exchange Trading Calendars. -- [bizdays](https://github.com/wilsonfreitas/python-bizdays) - Business days calculations and utilities. -- [pandas_market_calendars](https://github.com/rsheftel/pandas_market_calendars) - Exchange calendars to use with pandas for trading applications. - -### Data Sources -- [StockAPI](https://stockapi.com.cn) – Free real-time Chinese stock data (REST & WebSocket). -- [Polymarket Scanner API](https://github.com/vesper-astrena/polymarket-scanner-api) - Real-time arbitrage detection API for Polymarket prediction markets, scanning 12,000+ markets for mispricings. -- [yfinance](https://github.com/ranaroussi/yfinance) - Yahoo! Finance market data downloader (+faster Pandas Datareader) -- [defeatbeta-api](https://github.com/defeat-beta/defeatbeta-api) - An open-source alternative to Yahoo Finance's market data APIs with higher reliability. -- [findatapy](https://github.com/cuemacro/findatapy) - Python library to download market data via Bloomberg, Quandl, Yahoo etc. -- [googlefinance](https://github.com/hongtaocai/googlefinance) - Python module to get real-time stock data from Google Finance API. -- [yahoo-finance](https://github.com/lukaszbanasiak/yahoo-finance) - Python module to get stock data from Yahoo! Finance. -- [pandas-datareader](https://github.com/pydata/pandas-datareader) - Python module to get data from various sources (Google Finance, Yahoo Finance, FRED, OECD, Fama/French, World Bank, Eurostat...) into Pandas datastructures such as DataFrame, Panel with a caching mechanism. -- [pandas-finance](https://github.com/davidastephens/pandas-finance) - High level API for access to and analysis of financial data. -- [pyhoofinance](https://github.com/innes213/pyhoofinance) - Rapidly queries Yahoo Finance for multiple tickers and returns typed data for analysis. -- [yfinanceapi](https://github.com/Karthik005/yfinanceapi) - Finance API for Python. -- [yql-finance](https://github.com/slawek87/yql-finance) - yql-finance is simple and fast. API returns stock closing prices for current period of time and current stock ticker (i.e. APPL, GOOGL). -- [ystockquote](https://github.com/cgoldberg/ystockquote) - Retrieve stock quote data from Yahoo Finance. -- [wallstreet](https://github.com/mcdallas/wallstreet) - Real time stock and option data. -- [stock_extractor](https://github.com/ZachLiuGIS/stock_extractor) - General Purpose Stock Extractors from Online Resources. -- [Stockex](https://github.com/cttn/Stockex) - Python wrapper for Yahoo! Finance API. -- [SwapAPI](https://swapapi.dev) - Free DEX aggregator API returning executable swap calldata across 46 EVM chains. No API key required. [GitHub](https://github.com/swap-api/swap-api) -- [finsymbols](https://github.com/skillachie/finsymbols) - Obtains stock symbols and relating information for SP500, AMEX, NYSE, and NASDAQ. -- [FRB](https://github.com/avelkoski/FRB) - Python Client for FRED® API. -- [inquisitor](https://github.com/econdb/inquisitor) - Python Interface to Econdb.com API. -- [yfi](https://github.com/nickelkr/yfi) - Yahoo! YQL library. -- [chinesestockapi](https://pypi.org/project/chinesestockapi/) - Python API to get Chinese stock price. (Last updated: 2015-03-21) -- [exchange](https://github.com/akarat/exchange) - Get current exchange rate. -- [ticks](https://github.com/jamescnowell/ticks) - Simple command line tool to get stock ticker data. -- [pybbg](https://github.com/bpsmith/pybbg) - Python interface to Bloomberg COM APIs. -- [ccy](https://github.com/lsbardel/ccy) - Python module for currencies. -- [tushare](https://pypi.org/project/tushare/) - A utility for crawling historical and Real-time Quotes data of China stocks. (Last updated: 2024-08-27) -- [edinet-mcp](https://github.com/ajtgjmdjp/edinet-mcp) - Parse Japanese XBRL financial statements from EDINET with 161 normalized labels, 26 financial metrics, and multi-company screening. -- [estat-mcp](https://github.com/ajtgjmdjp/estat-mcp) - Access Japanese government statistics (e-Stat) covering population, GDP, CPI, labor, and trade data with MCP integration and Polars export. -- [tdnet-disclosure-mcp](https://github.com/ajtgjmdjp/tdnet-disclosure-mcp) - Access Japanese timely disclosures (TDNet) via MCP. Retrieve earnings, dividends, forecasts, buybacks, and other filings for 4,000+ listed companies. No API key required. -- [cn_stock_src](https://github.com/jealous/cn_stock_src) - Utility for retrieving basic China stock data from different sources. -- [coinmarketcap](https://github.com/barnumbirr/coinmarketcap) - Python API for coinmarketcap. -- [coinpulse](https://github.com/soutone/coinpulse-python) - Python SDK for cryptocurrency portfolio tracking with real-time prices, P/L calculations, and price alerts. Free tier available. -- [after-hours](https://github.com/datawrestler/after-hours) - Obtain pre market and after hours stock prices for a given symbol. -- [bronto-python](https://pypi.org/project/bronto-python/) - Bronto API Integration for Python. [GitHub](https://github.com/Scotts-Marketplace/bronto-python) -- [pytdx](https://github.com/rainx/pytdx) - Python Interface for retrieving chinese stock realtime quote data from TongDaXin Nodes. -- [pdblp](https://github.com/matthewgilbert/pdblp) - A simple interface to integrate pandas and the Bloomberg Open API. -- [tiingo](https://github.com/hydrosquall/tiingo-python) - Python interface for daily composite prices/OHLC/Volume + Real-time News Feeds, powered by the Tiingo Data Platform. -- [iexfinance](https://github.com/addisonlynch/iexfinance) - Python Interface for retrieving real-time and historical prices and equities data from The Investor's Exchange. -- [pyEX](https://github.com/timkpaine/pyEX) - Python interface to IEX with emphasis on pandas, support for streaming data, premium data, points data (economic, rates, commodities), and technical indicators. -- [alpaca-trade-api](https://github.com/alpacahq/alpaca-trade-api-python) - Python interface for retrieving real-time and historical prices from Alpaca API as well as trade execution. -- [metatrader5](https://pypi.org/project/MetaTrader5/) - API Connector to MetaTrader 5 Terminal. (Last updated: 2026-02-20) -- [akshare](https://github.com/jindaxiang/akshare) - AkShare is an elegant and simple financial data interface library for Python, built for human beings! -- [yahooquery](https://github.com/dpguthrie/yahooquery) - Python interface for retrieving data through unofficial Yahoo Finance API. -- [investpy](https://github.com/alvarobartt/investpy) - Financial Data Extraction from Investing.com with Python! -- [yliveticker](https://github.com/yahoofinancelive/yliveticker) - Live stream of market data from Yahoo Finance websocket. -- [bbgbridge](https://github.com/ran404/bbgbridge) - Easy to use Bloomberg Desktop API wrapper for Python. -- [polygon.io](https://github.com/polygon-io/client-python) - A python library for Polygon.io financial data APIs. -- [alpha_vantage](https://github.com/RomelTorres/alpha_vantage) - A python wrapper for Alpha Vantage API for financial data. -- [oilpriceapi](https://github.com/OilpriceAPI/python-sdk) - Python SDK for real-time oil and commodity prices (WTI, Brent, Urals, natural gas, coal) with OpenBB integration. -- [FinanceDataReader](https://github.com/FinanceData/FinanceDataReader) - Open Source Financial data reader for U.S, Korean, Japanese, Chinese, Vietnamese Stocks -- [pystlouisfed](https://github.com/TomasKoutek/pystlouisfed) - Python client for Federal Reserve Bank of St. Louis API - FRED, ALFRED, GeoFRED and FRASER. -- [python-bcb](https://github.com/wilsonfreitas/python-bcb) - Python interface to Brazilian Central Bank web services. -- [swiss-finance-data](https://github.com/EMen11/swiss-finance-data) - Python package for Swiss financial data (SNB Policy Rate, SARON, CHF FX rates, CPI, SMI equities, Confederation bond yields) from official SNB sources. -- [market-prices](https://github.com/maread99/market_prices) - Create meaningful OHLCV datasets from knowledge of [exchange-calendars](https://github.com/gerrymanoim/exchange_calendars) (works out-the-box with data from Yahoo Finance). -- [tardis-python](https://github.com/tardis-dev/tardis-python) - Python interface for Tardis.dev high frequency crypto market data -- [lake-api](https://github.com/crypto-lake/lake-api) - Python interface for Crypto Lake high frequency crypto market data -- [tessa](https://github.com/ymyke/tessa) - simple, hassle-free access to price information of financial assets (currently based on yfinance and pycoingecko), including search and a symbol class. -- [pandaSDMX](https://github.com/dr-leo/pandaSDMX) - Python package that implements SDMX 2.1 (ISO 17369:2013), a format for exchange of statistical data and metadata used by national statistical agencies, central banks, and international organisations. -- [cif](https://github.com/LenkaV/CIF) - Python package that include few composite indicators, which summarize multidimensional relationships between individual economic indicators. -- [finagg](https://github.com/theOGognf/finagg) - finagg is a Python package that provides implementations of popular and free financial APIs, tools for aggregating historical data from those APIs into SQL databases, and tools for transforming aggregated data into features useful for analysis and AI/ML. -- [FinanceDatabase](https://github.com/JerBouma/FinanceDatabase) - This is a database of 300.000+ symbols containing Equities, ETFs, Funds, Indices, Currencies, Cryptocurrencies and Money Markets. -- [Trading Strategy](https://github.com/tradingstrategy-ai/trading-strategy/) - download price data for decentralised exchanges and lending protocols (DeFi) -- [datamule-python](https://github.com/john-friedman/datamule-python) - A package to work with SEC data. Incorporates datamule endpoints. -- [fsynth](https://github.com/welcra/fsynth) - Python library for high-fidelity unlimited synthetic financial data generation using Heston Stochastic Volatility and Merton Jump Diffusion. -- [fedfred](https://nikhilxsunder.github.io/fedfred/) - FRED & GeoFRED Economic data API with preprocessed dataframe output in pandas/geopandas, polars/polars_st, and dask dataframes/geodataframes. -- [edgar-sec](https://nikhilxsunder.github.io/edgar-sec/) - EDGAR Financial data API with preprocessed dataclass outputs. -- [edgartools](https://github.com/dgunning/edgartools) - AI-native SEC EDGAR library with XBRL financials, clean text extraction, 17+ typed forms, and pandas DataFrames. -- [FXMacroData](https://fxmacrodata.com/) - Real-time forex macroeconomic API for all major currency pairs sourced from central bank announcements. [GitHub](https://github.com/fxmacrodata/fxmacrodata) -- [wallstreet](https://github.com/mcdallas/wallstreet) - Real time stock and option data. - -### Excel Integration - -- [xlwings](https://www.xlwings.org/) - Make Excel fly with Python. [GitHub](https://github.com/xlwings/xlwings) -- [openpyxl](https://openpyxl.readthedocs.io/en/latest/) - Read/Write Excel 2007 xlsx/xlsm files. -- [xlrd](https://github.com/python-excel/xlrd) - Library for developers to extract data from Microsoft Excel spreadsheet files. -- [xlsxwriter](https://xlsxwriter.readthedocs.io/) - Write files in the Excel 2007+ XLSX file format. [GitHub](https://github.com/jmcnamara/XlsxWriter) -- [xlwt](https://github.com/python-excel/xlwt) - Library to create spreadsheet files compatible with MS Excel 97/2000/XP/2003 XLS files, on any platform. -- [xlloop](http://xlloop.sourceforge.net) - XLLoop is an open source framework for implementing Excel user-defined functions (UDFs) on a centralised server (a function server). [GitHub](https://github.com/poidasmith/xlloop) -- [expy](http://www.bnikolic.co.uk/expy/expy.html) - The ExPy add-in allows easy use of Python directly from within an Microsoft Excel spreadsheet, both to execute arbitrary code and to define new Excel functions. -- [pyxll](https://www.pyxll.com) - PyXLL is an Excel add-in that enables you to extend Excel using nothing but Python code. - -### Visualization - -- [D-Tale](https://github.com/man-group/dtale) - Visualizer for pandas dataframes and xarray datasets. -- [mplfinance](https://github.com/matplotlib/mplfinance) - matplotlib utilities for the visualization, and visual analysis, of financial data. -- [finplot](https://github.com/highfestiva/finplot) - Performant and effortless finance plotting for Python. -- [finvizfinance](https://github.com/lit26/finvizfinance) - Finviz analysis python library. -- [market-analy](https://github.com/maread99/market_analy) - Analysis and interactive charting using [market-prices](https://github.com/maread99/market_prices) and bqplot. -- [QuantInvestStrats](https://github.com/ArturSepp/QuantInvestStrats) - Quantitative Investment Strategies (QIS) package implements Python analytics for visualisation of financial data, performance reporting, analysis of quantitative strategies. - -## R - -### Numerical Libraries & Data Structures - -- [xts](https://github.com/joshuaulrich/xts) - eXtensible Time Series: Provide for uniform handling of R's different time-based data classes by extending zoo, maximizing native format information preservation and allowing for user level customization and extension, while simplifying cross-class interoperability. -- [data.table](https://github.com/Rdatatable/data.table) - Extension of data.frame: Fast aggregation of large data (e.g. 100GB in RAM), fast ordered joins, fast add/modify/delete of columns by group using no copies at all, list columns and a fast file reader (fread). Offers a natural and flexible syntax, for faster development. -- [sparseEigen](https://github.com/dppalomar/sparseEigen) - Sparse principal component analysis. -- [TSdbi](http://tsdbi.r-forge.r-project.org/) - Provides a common interface to time series databases. -- [tseries](https://cran.r-project.org/web/packages/tseries/index.html) - Time Series Analysis and Computational Finance. -- [zoo](https://cran.r-project.org/web/packages/zoo/index.html) - S3 Infrastructure for Regular and Irregular Time Series (Z's Ordered Observations). -- [tis](https://cran.r-project.org/web/packages/tis/index.html) - Functions and S3 classes for time indexes and time indexed series, which are compatible with FAME frequencies. -- [tfplot](https://cran.r-project.org/web/packages/tfplot/index.html) - Utilities for simple manipulation and quick plotting of time series data. -- [tframe](https://cran.r-project.org/web/packages/tframe/index.html) - A kernel of functions for programming time series methods in a way that is relatively independently of the representation of time. - -### Data Sources - -- [IBrokers](https://cran.r-project.org/web/packages/IBrokers/index.html) - Provides native R access to Interactive Brokers Trader Workstation API. -- [Rblpapi](https://github.com/Rblp/Rblpapi) - An R Interface to 'Bloomberg' is provided via the 'Blp API'. -- [Rbitcoin](https://github.com/jangorecki/Rbitcoin) - Unified markets API interface (bitstamp, kraken, btce, bitmarket). -- [GetTDData](https://github.com/msperlin/GetTDData) - Downloads and aggregates data for Brazilian government issued bonds directly from the website of Tesouro Direto. -- [GetHFData](https://github.com/msperlin/GetHFData) - Downloads and aggregates high frequency trading data for Brazilian instruments directly from Bovespa ftp site. -- [td](https://github.com/eddelbuettel/td) - Interfaces the 'twelvedata' API for stocks and (digital and standard) currencies. -- [rbcb](https://github.com/wilsonfreitas/rbcb) - R interface to Brazilian Central Bank web services. -- [rb3](https://github.com/ropensci/rb3) - A bunch of downloaders and parsers for data delivered from B3. -- [simfinapi](https://github.com/matthiasgomolka/simfinapi) - Makes 'SimFin' data () easily accessible in R. -- [tidyfinance](https://github.com/tidy-finance/r-tidyfinance) - Tidy Finance helper functions to download financial data and process the raw data into a structured Format (tidy data), including -date conversion, scaling factor values, and filtering by the specified date. - -### Financial Instruments and Pricing - -- [RQuantLib](https://github.com/eddelbuettel/rquantlib) - RQuantLib connects GNU R with QuantLib. -- [quantmod](https://cran.r-project.org/web/packages/quantmod/index.html) - Quantitative Financial Modelling Framework. [GitHub](https://github.com/joshuaulrich/quantmod) -- [Rmetrics](https://www.rmetrics.org) - The premier open source software solution for teaching and training quantitative finance. - - [fAsianOptions](https://cran.r-project.org/web/packages/fAsianOptions/index.html) - EBM and Asian Option Valuation. - - [fAssets](https://cran.r-project.org/web/packages/fAssets/index.html) - Analysing and Modelling Financial Assets. - - [fBasics](https://cran.r-project.org/web/packages/fBasics/index.html) - Markets and Basic Statistics. - - [fBonds](https://cran.r-project.org/web/packages/fBonds/index.html) - Bonds and Interest Rate Models. - - [fExoticOptions](https://cran.r-project.org/web/packages/fExoticOptions/index.html) - Exotic Option Valuation. - - [fOptions](https://cran.r-project.org/web/packages/fOptions/index.html) - Pricing and Evaluating Basic Options. - - [fPortfolio](https://cran.r-project.org/web/packages/fPortfolio/index.html) - Portfolio Selection and Optimization. -- [portfolio](https://github.com/dgerlanc/portfolio) - Analysing equity portfolios. -- [sparseIndexTracking](https://github.com/dppalomar/sparseIndexTracking) - Portfolio design to track an index. -- [covFactorModel](https://github.com/dppalomar/covFactorModel) - Covariance matrix estimation via factor models. -- [riskParityPortfolio](https://github.com/dppalomar/riskParityPortfolio) - Blazingly fast design of risk parity portfolios. -- [sde](https://cran.r-project.org/web/packages/sde/index.html) - Simulation and Inference for Stochastic Differential Equations. -- [YieldCurve](https://cran.r-project.org/web/packages/YieldCurve/index.html) - Modelling and estimation of the yield curve. -- [SmithWilsonYieldCurve](https://cran.r-project.org/web/packages/SmithWilsonYieldCurve/index.html) - Constructs a yield curve by the Smith-Wilson method from a table of LIBOR and SWAP rates. -- [ycinterextra](https://cran.r-project.org/web/packages/ycinterextra/index.html) - Yield curve or zero-coupon prices interpolation and extrapolation. -- [AmericanCallOpt](https://cran.r-project.org/web/packages/AmericanCallOpt/index.html) - This package includes pricing function for selected American call options with underlying assets that generate payouts. -- [VarSwapPrice](https://cran.r-project.org/web/packages/VarSwapPrice/index.html) - Pricing a variance swap on an equity index. -- [RND](https://cran.r-project.org/web/packages/RND/index.html) - Risk Neutral Density Extraction Package. -- [LSMonteCarlo](https://cran.r-project.org/web/packages/LSMonteCarlo/index.html) - American options pricing with Least Squares Monte Carlo method. -- [OptHedging](https://cran.r-project.org/web/packages/OptHedging/index.html) - Estimation of value and hedging strategy of call and put options. -- [tvm](https://cran.r-project.org/web/packages/tvm/index.html) - Time Value of Money Functions. -- [OptionPricing](https://cran.r-project.org/web/packages/OptionPricing/index.html) - Option Pricing with Efficient Simulation Algorithms. -- [credule](https://github.com/blenezet/credule) - Credit Default Swap Functions. -- [derivmkts](https://cran.r-project.org/web/packages/derivmkts/index.html) - Functions and R Code to Accompany Derivatives Markets. [GitHub](https://github.com/rmcd1024/derivmkts) -- [FinCal](https://github.com/felixfan/FinCal) - Package for time value of money calculation, time series analysis and computational finance. -- [r-quant](https://github.com/artyyouth/r-quant) - R code for quantitative analysis in finance. -- [options.studies](https://github.com/taylorizing/options.studies) - options trading studies functions for use with options.data package and shiny. -- [PortfolioAnalytics](https://github.com/braverock/PortfolioAnalytics) - Portfolio Analysis, Including Numerical Methods for Optimizationof Portfolios. -- [fmbasics](https://github.com/imanuelcostigan/fmbasics) - Financial Market Building Blocks. -- [R-fixedincome](https://github.com/wilsonfreitas/R-fixedincome) - Fixed income tools for R. - -### Trading - -- [backtest](https://cran.r-project.org/web/packages/backtest/index.html) - Exploring Portfolio-Based Conjectures About Financial Instruments. -- [pa](https://cran.r-project.org/web/packages/pa/index.html) - Performance Attribution for Equity Portfolios. -- [TTR](https://github.com/joshuaulrich/TTR) - Technical Trading Rules. -- [QuantTools](https://quanttools.bitbucket.io/_site/index.html) - Enhanced Quantitative Trading Modelling. -- [blotter](https://github.com/braverock/blotter) - Transaction infrastructure for defining instruments, transactions, portfolios and accounts for trading systems and simulation. Provides portfolio support for multi-asset class and multi-currency portfolios. Actively maintained and developed. - -### Backtesting - -- [quantstrat](https://github.com/braverock/quantstrat) - Transaction-oriented infrastructure for constructing trading systems and simulation. Provides support for multi-asset class and multi-currency portfolios for backtesting and other financial research. - -### Risk Analysis - -- [PerformanceAnalytics](https://github.com/braverock/PerformanceAnalytics) - Econometric tools for performance and risk analysis. - -### Factor Analysis - -- [FactorAnalytics](https://github.com/braverock/FactorAnalytics) - The FactorAnalytics package contains fitting and analysis methods for the three main types of factor models used in conjunction with portfolio construction, optimization and risk management, namely fundamental factor models, time series factor models and statistical factor models. -- [Expected Returns](https://github.com/JustinMShea/ExpectedReturns) - Solutions for enhancing portfolio diversification and replications of seminal papers with R, most of which are discussed in one of the best investment references of the recent decade, Expected Returns: An Investors Guide to Harvesting Market Rewards by Antti Ilmanen. - -### Time Series - -- [tseries](https://cran.r-project.org/web/packages/tseries/index.html) - Time Series Analysis and Computational Finance. -- [fGarch](https://cran.r-project.org/web/packages/fGarch/index.html) - Rmetrics - Autoregressive Conditional Heteroskedastic Modelling. -- [timeSeries](https://cran.r-project.org/web/packages/timeSeries/index.html) - Rmetrics - Financial Time Series Objects. -- [rugarch](https://github.com/alexiosg/rugarch) - Univariate GARCH Models. -- [rmgarch](https://github.com/alexiosg/rmgarch) - Multivariate GARCH Models. -- [tidypredict](https://github.com/edgararuiz/tidypredict) - Run predictions inside the database . -- [tidyquant](https://github.com/business-science/tidyquant) - Bringing financial analysis to the tidyverse. -- [timetk](https://github.com/business-science/timetk) - A toolkit for working with time series in R. -- [tibbletime](https://github.com/business-science/tibbletime) - Built on top of the tidyverse, tibbletime is an extension that allows for the creation of time aware tibbles through the setting of a time index. -- [matrixprofile](https://github.com/matrix-profile-foundation/matrixprofile) - Time series data mining library built on top of the novel Matrix Profile data structure and algorithms. -- [garchmodels](https://github.com/AlbertoAlmuinha/garchmodels) - A parsnip backend for GARCH models. - -### Calendars - -- [timeDate](https://cran.r-project.org/web/packages/timeDate/index.html) - Chronological and Calendar Objects -- [bizdays](https://github.com/wilsonfreitas/R-bizdays) - Business days calculations and utilities - -## Matlab - -### Alternatives - -- [RunMat](https://runmat.org) - High performance, Open Source, MATLAB syntax runtime. [GitHub](https://github.com/runmat-org/runmat) - -### FrameWorks - -- [QUANTAXIS](https://github.com/yutiansut/quantaxis) - Integrated Quantitative Toolbox with Matlab. -- [PROJ_Option_Pricing_Matlab](https://github.com/jkirkby3/PROJ_Option_Pricing_Matlab) - Quant Option Pricing - Exotic/Vanilla: Barrier, Asian, European, American, Parisian, Lookback, Cliquet, Variance Swap, Swing, Forward Starting, Step, Fader - -## Julia - -- [CcyConv.jl](https://github.com/bhftbootcamp/CcyConv.jl) - Currency conversion library for Julia -- [CryptoExchangeAPIs.jl](https://github.com/bhftbootcamp/CryptoExchangeAPIs.jl) - A Julia library for cryptocurrency exchange APIs -- [Fastback.jl](https://github.com/rbeeli/Fastback.jl) - Blazing fast Julia backtester. -- [Lucky.jl](https://github.com/oliviermilla/Lucky.jl) - Modular, asynchronous trading engine in pure Julia. -- [QuantLib.jl](https://github.com/pazzo83/QuantLib.jl) - Quantlib implementation in pure Julia. -- [Ito.jl](https://github.com/aviks/Ito.jl) - A Julia package for quantitative finance. -- [LightweightCharts.jl](https://github.com/bhftbootcamp/LightweightCharts.jl) - Julia wrapper for Lightweight Charts™ by TradingView. -- [TALib.jl](https://github.com/femtotrader/TALib.jl) - A Julia wrapper for TA-Lib. -- [Miletus.jl](https://github.com/JuliaComputing/Miletus.jl) - A financial contract definition, modeling language, and valuation framework. -- [Temporal.jl](https://github.com/dysonance/Temporal.jl) - Flexible and efficient time series class & methods. -- [Indicators.jl](https://github.com/dysonance/Indicators.jl) - Financial market technical analysis & indicators on top of Temporal. -- [Strategems.jl](https://github.com/dysonance/Strategems.jl) - Quantitative systematic trading strategy development and backtesting. -- [TimeSeries.jl](https://github.com/JuliaStats/TimeSeries.jl) - Time series toolkit for Julia. -- [TechnicalIndicatorCharts.jl](https://github.com/g-gundam/TechnicalIndicatorCharts.jl) - Visualize OnlineTechnicalIndicators.jl using LightweightCharts.jl. -- [MarketTechnicals.jl](https://github.com/JuliaQuant/MarketTechnicals.jl) - Technical analysis of financial time series on top of TimeSeries. -- [MarketData.jl](https://github.com/JuliaQuant/MarketData.jl) - Time series market data. -- [OnlineTechnicalIndicators.jl](https://github.com/femtotrader/OnlineTechnicalIndicators.jl) - Julia Technical Analysis Indicators via online algorithms. -- [OnlinePortfolioAnalytics.jl](https://github.com/femtotrader/OnlinePortfolioAnalytics.jl) - A Julia quantitative portfolio analytics (risk / performance) via online algorithms. -- [OnlineResamplers.jl](https://github.com/femtotrader/OnlineResamplers.jl) - High-performance Julia package for real-time resampling of financial market data. -- [RiskPerf.jl](https://github.com/rbeeli/RiskPerf.jl) - Quantitative risk and performance analysis package for financial time series powered by the Julia language. -- [TimeFrames.jl](https://github.com/femtotrader/TimeFrames.jl) - A Julia library that defines TimeFrame (essentially for resampling TimeSeries). -- [DataFrames.jl](https://github.com/JuliaData/DataFrames.jl) - In-memory tabular data in Julia -- [TSFrames.jl](https://github.com/xKDR/TSFrames.jl) - Handle timeseries data on top of the powerful and mature DataFrames.jl -- [TimeArrays.jl](https://github.com/bhftbootcamp/TimeArrays.jl) - Time series handling for Julia - -## Java - -- [Strata](http://strata.opengamma.io/) - Modern open-source analytics and market risk library designed and written in Java. [GitHub](https://github.com/OpenGamma/Strata) -- [JQuantLib](https://github.com/frgomes/jquantlib) - JQuantLib is a free, open-source, comprehensive framework for quantitative finance, written in 100% Java. -- [finmath.net](http://finmath.net) - Java library with algorithms and methodologies related to mathematical finance. [GitHub](https://github.com/finmath/finmath-lib) -- [quantcomponents](https://github.com/lsgro/quantcomponents) - Free Java components for Quantitative Finance and Algorithmic Trading. -- [DRIP](https://lakshmidrip.github.io/DRIP) - Fixed Income, Asset Allocation, Transaction Cost Analysis, XVA Metrics Libraries. -- [ta4j](https://github.com/ta4j/ta4j) - A Java library for technical analysis. - -## JavaScript - -- [finance.js](https://github.com/ebradyjobory/finance.js) - A JavaScript library for common financial calculations. -- [portfolio-allocation](https://github.com/lequant40/portfolio_allocation_js) - PortfolioAllocation is a JavaScript library designed to help constructing financial portfolios made of several assets: bonds, commodities, cryptocurrencies, currencies, exchange traded funds (ETFs), mutual funds, stocks... -- [Ghostfolio](https://github.com/ghostfolio/ghostfolio) - Wealth management software to keep track of financial assets like stocks, ETFs or cryptocurrencies and make solid, data-driven investment decisions. -- [IndicatorTS](https://github.com/cinar/indicatorts) - Indicator is a TypeScript module providing various stock technical analysis indicators, strategies, and a backtest framework for trading. -- [chart-patterns](https://github.com/focus1691/chart-patterns) - Technical analysis library for Market Profile, Volume Profile, Stacked Imbalances and High Volume Node indicators. -- [orderflow](https://github.com/focus1691/orderflow) - Orderflow trade aggregator for building Footprint Candles from exchange websocket data. -- [ccxt](https://github.com/ccxt/ccxt) - A JavaScript / Python / PHP cryptocurrency trading API with support for more than 100 bitcoin/altcoin exchanges. -- [SimpleFunctions](https://github.com/spfunctions/simplefunctions-cli) - Prediction market intelligence CLI for Kalshi and Polymarket. Causal thesis models, edge detection, 24/7 orderbook monitoring, what-if scenarios, and trade execution. MCP server for AI agent integration. -- [PENDAX](https://github.com/CompendiumFi/PENDAX-SDK) - Javascript SDK for Trading/Data API and Websockets for FTX, FTXUS, OKX, Bybit, & More. -- [PreReason](https://github.com/PreReason/mcp) - Pre-analyzed Bitcoin and macro market briefings for AI agents. 17 contexts with trend signals, confidence scores, and regime classification via REST API and MCP. -- [pmxt](https://github.com/pmxt-dev/pmxt) - The CCXT for prediction markets. A unified API for trading on Polymarket, Kalshi, and more. -- [pmxt](https://github.com/qoery-com/pmxt) - A unified API for accessing prediction market data across multiple exchanges. CCXT for prediction markets. -- [rebalance](https://github.com/cjroth/rebalance) - Interactive portfolio rebalancing tool that imports brokerage CSV data, sets target allocations, and generates trade instructions. - -### Data Visualization - -- [QUANTAXIS_Webkit](https://github.com/yutiansut/QUANTAXIS_Webkit) - An awesome visualization center based on quantaxis. - -## Haskell - -- [quantfin](https://github.com/boundedvariation/quantfin) - quant finance in pure haskell. -- [Haxcel](https://github.com/MarcusRainbow/Haxcel) - Excel Addin for Haskell. -- [Ffinar](https://github.com/MarcusRainbow/Ffinar) - A financial maths library in Haskell. - -## Scala - -- [QuantScale](https://github.com/choucrifahed/quantscale) - Scala Quantitative Finance Library. -- [Scala Quant](https://github.com/frankcash/Scala-Quant) - Scala library for working with stock data from IFTTT recipes or Google Finance. - -## Ruby - -- [Jiji](https://github.com/unageanu/jiji2) - Open Source Forex algorithmic trading framework using OANDA REST API. - -## Elixir/Erlang - -- [Tai](https://github.com/fremantle-capital/tai) - Open Source composable, real time, market data and trade execution toolkit. -- [Workbench](https://github.com/fremantle-industries/workbench) - From Idea to Execution - Manage your trading operation across a globally distributed cluster -- [Prop](https://github.com/fremantle-industries/prop) - An open and opinionated trading platform using productive & familiar open source libraries and tools for strategy research, execution and operation. - -## Golang - -- [Kelp](https://github.com/stellar/kelp) - Kelp is an open-source Golang algorithmic cryptocurrency trading bot that runs on centralized exchanges and Stellar DEX (command-line usage and desktop GUI). -- [marketstore](https://github.com/alpacahq/marketstore) - DataFrame Server for Financial Timeseries Data. -- [IndicatorGo](https://github.com/cinar/indicator) - IndicatorGo is a Golang module providing various stock technical analysis indicators, strategies, and a backtest framework for trading. - -## CPP - -- [QuantLib](https://github.com/lballabio/QuantLib) - The QuantLib project is aimed at providing a comprehensive software framework for quantitative finance. -- [QuantLibRisks](https://github.com/auto-differentiation/QuantLib-Risks-Cpp) - Fast risks with QuantLib in C++ -- [XAD](https://github.com/auto-differentiation/xad) - Automatic Differentation (AAD) Library -- [TradeFrame](https://github.com/rburkholder/trade-frame) - C++ 17 based framework/library (with sample applications) for testing options based automated trading ideas using DTN IQ real time data feed and Interactive Brokers (TWS API) for trade execution. Comes with built-in [Option Greeks/IV](https://github.com/rburkholder/trade-frame/tree/master/lib/TFOptions) calculation library. -- [Hikyuu](https://github.com/fasiondog/hikyuu) - A base on Python/C++ open source high-performance quant framework for faster analysis and backtesting, contains the complete trading system components for reuse and combination. You can use python or c++ freely. -- [OrderMatchingEngine](https://github.com/PIYUSH-KUMAR1809/order-matching-engine) - A production-grade, lock-free, high-frequency trading matching engine achieving 150M+ orders/sec. -- [PandoraTrader](https://github.com/pegasusTrader/PandoraTrader) - A C++ CTP trading framework, with very clear logic -- [NexusFix](https://github.com/SilverstreamsAI/NexusFix) - C++23 FIX protocol engine with zero-copy parsing and SIMD acceleration, 3x faster than QuickFIX. - -## Frameworks - -- [QuantLib](https://github.com/lballabio/QuantLib) - The QuantLib project is aimed at providing a comprehensive software framework for quantitative finance. - - QuantLibRisks - Fast risks with QuantLib in [Python](https://pypi.org/project/QuantLib-Risks/) and [C++](https://github.com/auto-differentiation/QuantLib-Risks-Cpp) - - XAD - Automatic Differentiation (AAD) Library in [Python](https://pypi.org/project/xad/) and [C++](https://github.com/auto-differentiation/xad/) - - [JQuantLib](https://github.com/frgomes/jquantlib) - Java port. - - [RQuantLib](https://github.com/eddelbuettel/rquantlib) - R port. - - [QuantLibAddin](https://www.quantlib.org/quantlibaddin/) - Excel support. - - [QuantLibXL](https://www.quantlib.org/quantlibxl/) - Excel support. - - [QLNet](https://github.com/amaggiulli/qlnet) - .Net port. - - [PyQL](https://github.com/enthought/pyql) - Python port. - - [QuantLib.jl](https://github.com/pazzo83/QuantLib.jl) - Julia port. - - [QuantLib-Python Documentation](https://quantlib-python-docs.readthedocs.io/) - Documentation for the Python bindings for the QuantLib library - -- [TA-Lib](https://ta-lib.org) - perform technical analysis of financial market data. [GitHub](https://github.com/TA-Lib/ta-lib) - - [ta-lib-python](https://github.com/TA-Lib/ta-lib-python) - - [ta-lib](https://github.com/TA-Lib/ta-lib) -- XAD: Automatic Differentation (AAD) Library for [Python](https://pypi.org/project/xad/) and [C++](https://github.com/auto-differentiation/xad) - - -## CSharp - -- [QuantConnect](https://github.com/QuantConnect/Lean) - Lean Engine is an open-source fully managed C# algorithmic trading engine built for desktop and cloud usage. -- [StockSharp](https://github.com/StockSharp/StockSharp) - Algorithmic trading and quantitative trading open source platform to develop trading robots (stock markets, forex, crypto, bitcoins, and options). -- [TDAmeritrade.DotNetCore](https://github.com/NVentimiglia/TDAmeritrade.DotNetCore) - Free, open-source .NET Client for the TD Ameritrade Trading Platform. Helps developers integrate TD Ameritrade API into custom trading solutions. - -## Rust - -- [QuantMath](https://github.com/MarcusRainbow/QuantMath) - Financial maths library for risk-neutral pricing and risk -- [Barter](https://github.com/barter-rs/barter-rs) - Open-source Rust framework for building event-driven live-trading & backtesting systems -- [LFEST](https://github.com/MathisWellmann/lfest-rs) - Simulated perpetual futures exchange to trade your strategy against. -- [TradeAggregation](https://github.com/MathisWellmann/trade_aggregation-rs) - Aggregate trades into user-defined candles using information driven rules. -- [OpenFinClaw](https://github.com/cryptoSUN2049/openFinclaw) - AI-native one-person hedge fund platform with Rust trading engine. Natural language → strategy → backtest → execution in 60s. Multi-market (US/HK/CN/Crypto), self-evolving strategy pipeline. Built on OpenClaw (68K+ stars). -- [SlidingFeatures](https://github.com/MathisWellmann/sliding_features-rs) - Chainable tree-like sliding windows for signal processing and technical analysis. -- [RustQuant](https://github.com/avhz/RustQuant) - Quantitative finance library written in Rust. -- [fin-primitives](https://github.com/Mattbusel/fin-primitives) - Financial market primitives in Rust: Price/Quantity/Symbol newtypes, BTreeMap order book, OHLCV aggregation, SMA/EMA/RSI indicators, position ledger with PnL, and composable risk monitor. -- [fin-stream](https://github.com/Mattbusel/fin-stream) - Real-time market data streaming in Rust: lock-free SPSC ring buffer, 100K+ ticks/second ingestion, multi-timeframe OHLCV construction, and Lorentz transforms on financial time series. -- [Special-Relativity-in-Financial-Modeling](https://github.com/Mattbusel/Special-Relativity-in-Financial-Modeling) - C++20 implementation of special-relativistic geometry applied to OHLCV data: Lorentz factors, spacetime intervals, Christoffel symbols, and geodesic deviation signals from live market data. DOI: 10.5281/zenodo.18639919 -- [finalytics](https://github.com/Nnamdi-sys/finalytics) - A rust library for financial data analysis. -- [RunMat](https://github.com/runmat-org/runmat) - Rust runtime for MATLAB-syntax array math with automatic CPU/GPU execution and fused kernels for quant simulations. - - - -## Reproducing Works, Training & Books - -- [Auto-Differentiation Website](https://auto-differentiation.github.io/) - Background and resources on Automatic Differentiation (AD) / Adjoint Algorithmic Differentitation (AAD). -- [Derman Papers](https://github.com/MarcosCarreira/DermanPapers) - Notebooks that replicate original quantitative finance papers from Emanuel Derman. -- [volatility-trading](https://github.com/jasonstrimpel/volatility-trading) - A complete set of volatility estimators based on Euan Sinclair's Volatility Trading. -- [quant](https://github.com/paulperry/quant) - Quantitative Finance and Algorithmic Trading exhaust; mostly ipython notebooks based on Quantopian, Zipline, or Pandas. -- [fecon235](https://github.com/rsvp/fecon235) - Open source project for software tools in financial economics. Many jupyter notebook to verify theoretical ideas and practical methods interactively. -- [Quantitative-Notebooks](https://github.com/LongOnly/Quantitative-Notebooks) - Educational notebooks on quantitative finance, algorithmic trading, financial modelling and investment strategy -- [QuantEcon](https://quantecon.org/) - Lecture series on economics, finance, econometrics and data science; QuantEcon.py, QuantEcon.jl, notebooks -- [FinanceHub](https://github.com/Finance-Hub/FinanceHub) - Resources for Quantitative Finance -- [Python_Option_Pricing](https://github.com/dedwards25/Python_Option_Pricing) - An library to price financial options written in Python. Includes: Black Scholes, Black 76, Implied Volatility, American, European, Asian, Spread Options. -- [python-training](https://github.com/jpmorganchase/python-training) - J.P. Morgan's Python training for business analysts and traders. -- [Stock_Analysis_For_Quant](https://github.com/LastAncientOne/Stock_Analysis_For_Quant) - Different Types of Stock Analysis in Excel, Matlab, Power BI, Python, R, and Tableau. -- [algorithmic-trading-with-python](https://github.com/chrisconlan/algorithmic-trading-with-python) - Source code for Algorithmic Trading with Python (2020) by Chris Conlan. -- [MEDIUM_NoteBook](https://github.com/cerlymarco/MEDIUM_NoteBook) - Repository containing notebooks of [cerlymarco](https://github.com/cerlymarco)'s posts on Medium. -- [QuantFinance](https://github.com/PythonCharmers/QuantFinance) - Training materials in quantitative finance. -- [IPythonScripts](https://github.com/mgroncki/IPythonScripts) - Tutorials about Quantitative Finance in Python and QuantLib: Pricing, xVAs, Hedging, Portfolio Optimisation, Machine Learning and Deep Learning. -- [Computational-Finance-Course](https://github.com/LechGrzelak/Computational-Finance-Course) - Materials for the course of Computational Finance. -- [Machine-Learning-for-Asset-Managers](https://github.com/emoen/Machine-Learning-for-Asset-Managers) - Implementation of code snippets, exercises and application to live data from Machine Learning for Asset Managers (Elements in Quantitative Finance) written by Prof. Marcos López de Prado. -- [Python-for-Finance-Cookbook](https://github.com/PacktPublishing/Python-for-Finance-Cookbook) - Python for Finance Cookbook, published by Packt. -- [modelos_vol_derivativos](https://github.com/ysaporito/modelos_vol_derivativos) - "Modelos de Volatilidade para Derivativos" book's Jupyter notebooks -- [NMOF](https://github.com/enricoschumann/NMOF) - Functions, examples and data from the first and the second edition of "Numerical Methods and Optimization in Finance" by M. Gilli, D. Maringer and E. Schumann (2019, ISBN:978-0128150658). -- [py4fi2nd](https://github.com/yhilpisch/py4fi2nd) - Jupyter Notebooks and code for Python for Finance (2nd ed., O'Reilly) by Yves Hilpisch. -- [aiif](https://github.com/yhilpisch/aiif) - Jupyter Notebooks and code for the book Artificial Intelligence in Finance (O'Reilly) by Yves Hilpisch. -- [py4at](https://github.com/yhilpisch/py4at) - Jupyter Notebooks and code for the book Python for Algorithmic Trading (O'Reilly) by Yves Hilpisch. -- [dawp](https://github.com/yhilpisch/dawp) - Jupyter Notebooks and code for Derivatives Analytics with Python (Wiley Finance) by Yves Hilpisch. -- [dx](https://github.com/yhilpisch/dx) - DX Analytics | Financial and Derivatives Analytics with Python. -- [QuantFinanceBook](https://github.com/LechGrzelak/QuantFinanceBook) - Quantitative Finance book. -- [rough_bergomi](https://github.com/ryanmccrickerd/rough_bergomi) - A Python implementation of the rough Bergomi model. -- [frh-fx](https://github.com/ryanmccrickerd/frh-fx) - A python implementation of the fast-reversion Heston model of Mechkov for FX purposes. -- [Value Investing Studies](https://github.com/euclidjda/value-investing-studies) - A collection of data analysis studies that examine the performance and characteristics of value investing over long periods of time. -- [Machine Learning Asset Management](https://github.com/firmai/machine-learning-asset-management) - Machine Learning in Asset Management (by @firmai). -- [Deep Learning Machine Learning Stock](https://github.com/LastAncientOne/Deep-Learning-Machine-Learning-Stock) - Deep Learning and Machine Learning stocks represent a promising long-term or short-term opportunity for investors and traders. -- [Technical Analysis and Feature Engineering](https://github.com/jo-cho/Technical_Analysis_and_Feature_Engineering) - Feature Engineering and Feature Importance of Machine Learning in Financial Market. -- [Differential Machine Learning and Axes that matter by Brian Huge and Antoine Savine](https://github.com/differential-machine-learning/notebooks) - Implement, demonstrate, reproduce and extend the results of the Risk articles 'Differential Machine Learning' (2020) and 'PCA with a Difference' (2021) by Huge and Savine, and cover implementation details left out from the papers. -- [systematictradingexamples](https://github.com/robcarver17/systematictradingexamples) - Examples of code related to book [Systematic Trading](www.systematictrading.org) and [blog](http://qoppac.blogspot.com) -- [pysystemtrade_examples](https://github.com/robcarver17/pysystemtrade_examples) - Examples using pysystemtrade for Robert Carver's [blog](http://qoppac.blogspot.com). -- [ML_Finance_Codes](https://github.com/mfrdixon/ML_Finance_Codes) - Machine Learning in Finance: From Theory to Practice Book -- [Hands-On Machine Learning for Algorithmic Trading](https://github.com/packtpublishing/hands-on-machine-learning-for-algorithmic-trading) - Hands-On Machine Learning for Algorithmic Trading, published by Packt -- [financialnoob-misc](https://github.com/financialnoob/misc) - Codes from @financialnoob's posts -- [MesoSim Options Trading Strategy Library](https://github.com/deltaray-io/strategy-library) - Free and public Options Trading strategy library for MesoSim. -- [Quant-Finance-With-Python-Code](https://github.com/lingyixu/Quant-Finance-With-Python-Code) - Repo for code examples in Quantitative Finance with Python by Chris Kelliher -- [QuantFinanceTraining](https://github.com/JoaoJungblut/QuantFinanceTraining) - This repository contains codes that were executed during my training in the CQF (Certificate in Quantitative Finance). The codes are organized by class, facilitating navigation and reference. -- [Statistical-Learning-based-Portfolio-Optimization](https://github.com/YannickKae/Statistical-Learning-based-Portfolio-Optimization) - This R Shiny App utilizes the Hierarchical Equal Risk Contribution (HERC) approach, a modern portfolio optimization method developed by Raffinot (2018). -- [book_irds3](https://github.com/attack68/book_irds3) - Code repository for Pricing and Trading Interest Rate Derivatives. -- [Autoencoder-Asset-Pricing-Models](https://github.com/RichardS0268/Autoencoder-Asset-Pricing-Models) - Reimplementation of Autoencoder Asset Pricing Models ([GKX, 2019](https://papers.ssrn.com/sol3/papers.cfm?abstract_id=3335536)). -- [Finance](https://github.com/shashankvemuri/Finance) - 150+ quantitative finance Python programs to help you gather, manipulate, and analyze stock market data. -- [101_formulaic_alphas](https://github.com/ram-ki/101_formulaic_alphas) - Implementation of [101 formulaic alphas](https://arxiv.org/ftp/arxiv/papers/1601/1601.00991.pdf) using qstrader. -- [Tidy Finance](https://www.tidy-finance.org/) - An opinionated approach to empirical research in financial economics - a fully transparent, open-source code base in multiple programming languages (Python and R) to enable the reproducible implementation of financial research projects for students and practitioners. -- [RoughVolatilityWorkshop](https://github.com/jgatheral/RoughVolatilityWorkshop) - 2024 QuantMind's Rough Volatility Workshop lectures. -- [AFML](https://github.com/boyboi86/AFML) - All the answers for exercises from Advances in Financial Machine Learning by Dr Marco Lopez de Parodo. -- [AlgoTradingLib](https://github.com/usdaud/algotradinglib.github.io) - A catalog of algorithmic trading libraries, frameworks, strategies, and educational materials. -- [Portfolio Optimization Book](https://portfoliooptimizationbook.com/) - Prof. Daniel Palomar's Portfolio Optimization Book. [GitHub](https://github.com/dppalomar/pob) - -## Commercial & Proprietary Services - -- [Chartscout](https://chartscout.io) - Real-time cryptocurrency chart pattern detection with automated alerts across multiple exchanges. -- [DayTradingBench](https://daytradingbench.com) - Live autonomous benchmark that evaluates LLM trading performance on DAX and Nasdaq indices using identical strategies and real-time market data. API access available. -- [CoinTester](https://cointester.io) - No-code crypto backtesting platform with 100+ indicators, AI sentiment signals, and 5+ years of historical data across 1,000+ trading pairs. -- [goMacro.ai](https://gomacro.ai) - AI-powered economic calendar with institutional-grade insights, bull/bear/base case scenario planning for NFP, CPI, PPI and other macro data releases. -- [StockAInsights](https://stockainsights.com) - AI-extracted financial statements API covering SEC filings including foreign filers (20-F, 6-K, 40-F), normalized quarterly and annual data from 2014+. -- [brapi.dev](https://brapi.dev/) - Brazilian stock market data API for B3/Bovespa quotes, historical OHLCV, dividends, and fundamentals. -- [13F Insight](https://13finsight.com/) - Track institutional investor 13F holdings with AI-powered analysis, position change alerts, and filing summaries. -- [Earnings Feed](https://earningsfeed.com/api) - Real-time SEC filings, insider trades, and institutional holdings API. -- [Financial Data](https://financialdata.net/) - Stock Market and Financial Data API. -- [Frostbyte](https://agent-gateway-kappa.vercel.app) - Real-time crypto prices for 500+ tokens via REST API with free tier, DeFi swap routing and portfolio tracking. -- [SaxoOpenAPI](https://www.developer.saxo/) - Saxo Bank financial data API. -- [RTPR](https://rtpr.io) - Real-time press release API delivering news from Business Wire, PR Newswire, and GlobeNewswire with sub-500ms latency. REST and WebSocket APIs for financial applications. Python and Node.js SDKs available. -- [Nasdaq Data Link](https://data.nasdaq.com/tools/full-list) - Financial data API with support for R, Python, Excel, Ruby, and many other languages (formerly Quandl). -- [Parsec](https://parsecfinance.com) - Prediction market API with Python SDK for normalized data and execution across 5 prediction market exchanges. Free tier: 10K requests/month. -- [Portfolio Optimizer](https://portfoliooptimizer.io/) - Portfolio Optimizer is a Web API for portfolio analysis and optimization. -- [Reddit WallstreetBets API](https://dashboard.nbshare.io/apps/reddit/api/) - Provides daily top 50 stocks from reddit (subreddit) Wallstreetbets and their sentiments via the API. -- [System R](https://agents.systemr.ai) - AI-native risk intelligence API for trading agents. Position sizing, risk validation, and system health in one call. -- [Telonex](https://telonex.io) - Tick-level prediction market data (trades, quotes, orderbooks, on-chain fills) via REST API and Python SDK. -- [ValueRay](https://www.valueray.com/api) - Technical, quantitative and sentiment data for stocks and ETFs with risk metrics, peer percentiles and market regime signals. Optimized for AI/LLM agents. -- [VertData](https://vertdata.com) - Institutional-grade financial intelligence platform. Track 43K+ congressional trades (STOCK Act), SEC insider Form 4 filings, 25 superinvestor 13F portfolios, CFTC futures positioning, ARK ETF holdings, and short interest — all scored by AI for signal strength. -- [KeepRule](https://keeprule.com/) - Curated library of decision-making principles and investment wisdom from masters like Buffett and Munger, featuring mental models for better investment thinking. -- [ML-Quant](https://www.ml-quant.com/) - Top Quant resources like ArXiv (sanity), SSRN, RePec, Journals, Podcasts, Videos, and Blogs. - -## Related Lists - -- [awesome-sec-filings](https://github.com/vibeyclaw/awesome-sec-filings) - A curated list of tools, data sources, libraries, and resources for working with SEC filings (13F, 10-K, 10-Q, 8-K). -- [CONVEXFI](https://github.com/convexfi) - Official GitHub organization for the convex research group at the Hong Kong University of Science and Technology (HKUST). diff --git a/site/projects.csv b/site/projects.csv index 5ca1aff..e8ea741 100644 --- a/site/projects.csv +++ b/site/projects.csv @@ -1,448 +1,496 @@ -project,section,last_commit,url,description,github,cran,repo -numpy,Python > Numerical Libraries & Data Structures,,https://www.numpy.org,NumPy is the fundamental package for scientific computing with Python.,False,False, -scipy,Python > Numerical Libraries & Data Structures,,https://www.scipy.org,"SciPy (pronounced “Sigh Pie”) is a Python-based ecosystem of open-source software for mathematics, science, and engineering.",False,False, -pandas,Python > Numerical Libraries & Data Structures,,https://pandas.pydata.org,"pandas is an open source, BSD-licensed library providing high-performance, easy-to-use data structures and data analysis tools for the Python programming language.",False,False, -polars,Python > Numerical Libraries & Data Structures,,https://docs.pola.rs/,Polars is a blazingly fast DataFrame library for manipulating structured data.,False,False, -quantdsl,Python > Numerical Libraries & Data Structures,2017-10-26,https://github.com/johnbywater/quantdsl,Domain specific language for quantitative analytics in finance and trading.,True,False,johnbywater/quantdsl -statistics,Python > Numerical Libraries & Data Structures,,https://docs.python.org/3/library/statistics.html,Builtin Python library for all basic statistical calculations.,False,False, -sympy,Python > Numerical Libraries & Data Structures,,https://www.sympy.org/,SymPy is a Python library for symbolic mathematics.,False,False, -pymc3,Python > Numerical Libraries & Data Structures,,https://docs.pymc.io/,Probabilistic Programming in Python: Bayesian Modeling and Probabilistic Machine Learning with Theano.,False,False, -modelx,Python > Numerical Libraries & Data Structures,,https://docs.modelx.io/,Python reimagination of spreadsheets as formula-centric objects that are interoperable with pandas.,False,False, -ArcticDB,Python > Numerical Libraries & Data Structures,2025-12-30,https://github.com/man-group/ArcticDB,High performance datastore for time series and tick data.,True,False,man-group/ArcticDB -OpenBB Terminal,Python > Financial Instruments and Pricing,2026-01-02,https://github.com/OpenBB-finance/OpenBBTerminal,Terminal for investment research for everyone.,True,False,OpenBB-finance/OpenBBTerminal -Fincept Terminal,Python > Financial Instruments and Pricing,2026-01-03,https://github.com/Fincept-Corporation/FinceptTerminal,Advance Data Based A.I Terminal for all Types of Financial Asset Research.,True,False,Fincept-Corporation/FinceptTerminal -PyQL,Python > Financial Instruments and Pricing,2025-08-20,https://github.com/enthought/pyql,QuantLib's Python port.,True,False,enthought/pyql -pyfin,Python > Financial Instruments and Pricing,2014-12-03,https://github.com/opendoor-labs/pyfin,Basic options pricing in Python. *ARCHIVED*,True,False,opendoor-labs/pyfin -vollib,Python > Financial Instruments and Pricing,2023-04-01,https://github.com/vollib/vollib,"vollib is a python library for calculating option prices, implied volatility and greeks.",True,False,vollib/vollib -QuantPy,Python > Financial Instruments and Pricing,2017-11-28,https://github.com/jsmidt/QuantPy,A framework for quantitative finance In python.,True,False,jsmidt/QuantPy -Finance-Python,Python > Financial Instruments and Pricing,2024-01-01,https://github.com/alpha-miner/Finance-Python,Python tools for Finance.,True,False,alpha-miner/Finance-Python -ffn,Python > Financial Instruments and Pricing,2025-12-15,https://github.com/pmorissette/ffn,A financial function library for Python.,True,False,pmorissette/ffn -pynance,Python > Financial Instruments and Pricing,2021-02-03,https://github.com/GriffinAustin/pynance,Lightweight Python library for assembling and analyzing financial data.,True,False,GriffinAustin/pynance -tia,Python > Financial Instruments and Pricing,2017-06-05,https://github.com/bpsmith/tia,Toolkit for integration and analysis.,True,False,bpsmith/tia -hasura/base-python-dash,Python > Financial Instruments and Pricing,,https://platform.hasura.io/hub/projects/hasura/base-python-dash,"Hasura quick start to deploy Dash framework. Written on top of Flask, Plotly.js, and React.js, Dash is ideal for building data visualization apps with highly custom user interfaces in pure Python.",False,False, -hasura/base-python-bokeh,Python > Financial Instruments and Pricing,,https://platform.hasura.io/hub/projects/hasura/base-python-bokeh,Hasura quick start to visualize data with bokeh library.,False,False, -pysabr,Python > Financial Instruments and Pricing,2022-04-21,https://github.com/ynouri/pysabr,SABR model Python implementation.,True,False,ynouri/pysabr -FinancePy,Python > Financial Instruments and Pricing,2025-11-07,https://github.com/domokane/FinancePy,"A Python Finance Library that focuses on the pricing and risk-management of Financial Derivatives, including fixed-income, equity, FX and credit derivatives.",True,False,domokane/FinancePy -gs-quant,Python > Financial Instruments and Pricing,2025-12-18,https://github.com/goldmansachs/gs-quant,Python toolkit for quantitative finance,True,False,goldmansachs/gs-quant -willowtree,Python > Financial Instruments and Pricing,2018-07-14,https://github.com/federicomariamassari/willowtree,Robust and flexible Python implementation of the willow tree lattice for derivatives pricing.,True,False,federicomariamassari/willowtree -financial-engineering,Python > Financial Instruments and Pricing,2017-11-20,https://github.com/federicomariamassari/financial-engineering,"Applications of Monte Carlo methods to financial engineering projects, in Python.",True,False,federicomariamassari/financial-engineering -optlib,Python > Financial Instruments and Pricing,2022-11-18,https://github.com/dbrojas/optlib,A library for financial options pricing written in Python.,True,False,dbrojas/optlib -tf-quant-finance,Python > Financial Instruments and Pricing,2025-03-21,https://github.com/google/tf-quant-finance,High-performance TensorFlow library for quantitative finance.,True,False,google/tf-quant-finance -Q-Fin,Python > Financial Instruments and Pricing,2023-04-07,https://github.com/RomanMichaelPaolucci/Q-Fin,A Python library for mathematical finance.,True,False,RomanMichaelPaolucci/Q-Fin -Quantsbin,Python > Financial Instruments and Pricing,2021-05-23,https://github.com/quantsbin/Quantsbin,"Tools for pricing and plotting of vanilla option prices, greeks and various other analysis around them.",True,False,quantsbin/Quantsbin -finoptions,Python > Financial Instruments and Pricing,2024-02-01,https://github.com/bbcho/finoptions-dev,Complete python implementation of R package fOptions with partial implementation of fExoticOptions for pricing various options.,True,False,bbcho/finoptions-dev -pypme,Python > Financial Instruments and Pricing,2025-03-31,https://github.com/ymyke/pypme,PME (Public Market Equivalent) calculation.,True,False,ymyke/pypme -AbsBox,Python > Financial Instruments and Pricing,2025-09-19,https://github.com/yellowbean/AbsBox,A Python based library to model cashflow for structured product like Asset-backed securities (ABS) and Mortgage-backed securities (MBS).,True,False,yellowbean/AbsBox -Intrinsic-Value-Calculator,Python > Financial Instruments and Pricing,2025-07-02,https://github.com/akashaero/Intrinsic-Value-Calculator,A Python tool for quick calculations of a stock's fair value using Discounted Cash Flow analysis.,True,False,akashaero/Intrinsic-Value-Calculator -Kelly-Criterion,Python > Financial Instruments and Pricing,2019-02-16,https://github.com/deltaray-io/kelly-criterion,Kelly Criterion implemented in Python to size portfolios based on J. L. Kelly Jr's formula.,True,False,deltaray-io/kelly-criterion -rateslib,Python > Financial Instruments and Pricing,2025-12-23,https://github.com/attack68/rateslib,"A fixed income library for pricing bonds and bond futures, and derivatives such as IRS, cross-currency and FX swaps.",True,False,attack68/rateslib -fypy,Python > Financial Instruments and Pricing,2025-02-27,https://github.com/jkirkby3/fypy,"Vanilla and exotic option pricing library to support quantitative R&D. Focus on pricing interesting/useful models and contracts (including and beyond Black-Scholes), as well as calibration of financial models to market data.",True,False,jkirkby3/fypy -pandas_talib,Python > Indicators,2018-05-30,https://github.com/femtotrader/pandas_talib,A Python Pandas implementation of technical analysis indicators.,True,False,femtotrader/pandas_talib -finta,Python > Indicators,2022-07-24,https://github.com/peerchemist/finta,Common financial technical analysis indicators implemented in Pandas.,True,False,peerchemist/finta -Tulipy,Python > Indicators,2019-04-11,https://github.com/cirla/tulipy,Financial Technical Analysis Indicator Library (Python bindings for [tulipindicators](https://github.com/TulipCharts/tulipindicators)),True,False,cirla/tulipy -lppls,Python > Indicators,2024-12-05,https://github.com/Boulder-Investment-Technologies/lppls,A Python module for fitting the [Log-Periodic Power Law Singularity (LPPLS)](https://en.wikipedia.org/wiki/Didier_Sornette#The_JLS_and_LPPLS_models) model.,True,False,Boulder-Investment-Technologies/lppls -talipp,Python > Indicators,2025-09-09,https://github.com/nardew/talipp,Incremental technical analysis library for Python.,True,False,nardew/talipp -streaming_indicators,Python > Indicators,2025-04-27,https://github.com/mr-easy/streaming_indicators,A python library for computing technical analysis indicators on streaming data.,True,False,mr-easy/streaming_indicators -skfolio,Python > Trading & Backtesting,2025-12-19,https://github.com/skfolio/skfolio,"Python library for portfolio optimization built on top of scikit-learn. It provides a unified interface and sklearn compatible tools to build, tune and cross-validate portfolio models.",True,False,skfolio/skfolio -Investing algorithm framework,Python > Trading & Backtesting,2025-12-30,https://github.com/coding-kitties/investing-algorithm-framework,"Framework for developing, backtesting, and deploying automated trading algorithms.",True,False,coding-kitties/investing-algorithm-framework -QSTrader,Python > Trading & Backtesting,2024-06-24,https://github.com/mhallsmoore/qstrader,QSTrader backtesting simulation engine.,True,False,mhallsmoore/qstrader -Blankly,Python > Trading & Backtesting,2024-12-30,https://github.com/Blankly-Finance/Blankly,"Fully integrated backtesting, paper trading, and live deployment.",True,False,Blankly-Finance/Blankly -TA-Lib,Python > Trading & Backtesting,2025-12-22,https://github.com/mrjbq7/ta-lib,Python wrapper for TA-Lib ().,True,False,mrjbq7/ta-lib -zipline,Python > Trading & Backtesting,2020-10-14,https://github.com/quantopian/zipline,Pythonic algorithmic trading library.,True,False,quantopian/zipline -zipline-reloaded,Python > Trading & Backtesting,2025-11-13,https://github.com/stefan-jansen/zipline-reloaded,"Zipline, a Pythonic Algorithmic Trading Library.",True,False,stefan-jansen/zipline-reloaded -QuantSoftware Toolkit,Python > Trading & Backtesting,2016-10-07,https://github.com/QuantSoftware/QuantSoftwareToolkit,Python-based open source software framework designed to support portfolio construction and management.,True,False,QuantSoftware/QuantSoftwareToolkit -quantitative,Python > Trading & Backtesting,2019-03-03,https://github.com/jeffrey-liang/quantitative,"Quantitative finance, and backtesting library.",True,False,jeffrey-liang/quantitative -analyzer,Python > Trading & Backtesting,2015-12-22,https://github.com/llazzaro/analyzer,Python framework for real-time financial and backtesting trading strategies.,True,False,llazzaro/analyzer -bt,Python > Trading & Backtesting,2025-11-24,https://github.com/pmorissette/bt,Flexible Backtesting for Python.,True,False,pmorissette/bt -backtrader,Python > Trading & Backtesting,2023-04-19,https://github.com/backtrader/backtrader,Python Backtesting library for trading strategies.,True,False,backtrader/backtrader -pythalesians,Python > Trading & Backtesting,2016-09-23,https://github.com/thalesians/pythalesians,"Python library to backtest trading strategies, plot charts, seamlessly download market data, analyze market patterns etc.",True,False,thalesians/pythalesians -pybacktest,Python > Trading & Backtesting,2019-09-09,https://github.com/ematvey/pybacktest,"Vectorized backtesting framework in Python / pandas, designed to make your backtesting easier.",True,False,ematvey/pybacktest -pyalgotrade,Python > Trading & Backtesting,2023-03-05,https://github.com/gbeced/pyalgotrade,Python Algorithmic Trading Library.,True,False,gbeced/pyalgotrade -basana,Python > Trading & Backtesting,2025-12-29,https://github.com/gbeced/basana,"A Python async and event driven framework for algorithmic trading, with a focus on crypto currencies.",True,False,gbeced/basana -tradingWithPython,Python > Trading & Backtesting,,https://pypi.org/project/tradingWithPython/,A collection of functions and classes for Quantitative trading.,False,False, -Pandas TA,Python > Trading & Backtesting,error,https://github.com/twopirllc/pandas-ta,Pandas TA is an easy to use Python 3 Pandas Extension with 115+ Indicators. Easily build Custom Strategies.,True,False,twopirllc/pandas-ta -ta,Python > Trading & Backtesting,2023-11-02,https://github.com/bukosabino/ta,Technical Analysis Library using Pandas (Python),True,False,bukosabino/ta -algobroker,Python > Trading & Backtesting,2016-03-31,https://github.com/joequant/algobroker,This is an execution engine for algo trading.,True,False,joequant/algobroker -pysentosa,Python > Trading & Backtesting,,https://pypi.org/project/pysentosa/,Python API for sentosa trading system.,False,False, -finmarketpy,Python > Trading & Backtesting,2025-03-10,https://github.com/cuemacro/finmarketpy,Python library for backtesting trading strategies and analyzing financial markets.,True,False,cuemacro/finmarketpy -binary-martingale,Python > Trading & Backtesting,2017-10-16,https://github.com/metaperl/binary-martingale,Computer program to automatically trade binary options martingale style.,True,False,metaperl/binary-martingale -fooltrader,Python > Trading & Backtesting,2020-07-19,https://github.com/foolcage/fooltrader,the project using big-data technology to provide an uniform way to analyze the whole market.,True,False,foolcage/fooltrader -zvt,Python > Trading & Backtesting,2025-11-30,https://github.com/zvtvz/zvt,"the project using sql, pandas to provide an uniform and extendable way to record data, computing factors, select securities, backtesting, realtime trading and it could show all of them in clearly charts in realtime.",True,False,zvtvz/zvt -pylivetrader,Python > Trading & Backtesting,2022-04-11,https://github.com/alpacahq/pylivetrader,zipline-compatible live trading library.,True,False,alpacahq/pylivetrader -pipeline-live,Python > Trading & Backtesting,2022-04-11,https://github.com/alpacahq/pipeline-live,zipline's pipeline capability with IEX for live trading.,True,False,alpacahq/pipeline-live -zipline-extensions,Python > Trading & Backtesting,2018-09-17,https://github.com/quantrocket-llc/zipline-extensions,Zipline extensions and adapters for QuantRocket.,True,False,quantrocket-llc/zipline-extensions -moonshot,Python > Trading & Backtesting,2024-08-14,https://github.com/quantrocket-llc/moonshot,Vectorized backtester and trading engine for QuantRocket based on Pandas.,True,False,quantrocket-llc/moonshot -PyPortfolioOpt,Python > Trading & Backtesting,2025-11-29,https://github.com/robertmartin8/PyPortfolioOpt,"Financial portfolio optimization in python, including classical efficient frontier and advanced methods.",True,False,robertmartin8/PyPortfolioOpt -Eiten,Python > Trading & Backtesting,2020-09-21,https://github.com/tradytics/eiten,"Eiten is an open source toolkit by Tradytics that implements various statistical and algorithmic investing strategies such as Eigen Portfolios, Minimum Variance Portfolios, Maximum Sharpe Ratio Portfolios, and Genetic Algorithms based Portfolios.",True,False,tradytics/eiten -riskparity.py,Python > Trading & Backtesting,2024-05-27,https://github.com/dppalomar/riskparity.py,fast and scalable design of risk parity portfolios with TensorFlow 2.0,True,False,dppalomar/riskparity.py -mlfinlab,Python > Trading & Backtesting,2021-12-01,https://github.com/hudson-and-thames/mlfinlab,"Implementations regarding ""Advances in Financial Machine Learning"" by Marcos Lopez de Prado. (Feature Engineering, Financial Data Structures, Meta-Labeling)",True,False,hudson-and-thames/mlfinlab -pyqstrat,Python > Trading & Backtesting,2023-11-05,https://github.com/abbass2/pyqstrat,"A fast, extensible, transparent python library for backtesting quantitative strategies.",True,False,abbass2/pyqstrat -NowTrade,Python > Trading & Backtesting,2017-02-07,https://github.com/edouardpoitras/NowTrade,Python library for backtesting technical/mechanical strategies in the stock and currency markets.,True,False,edouardpoitras/NowTrade -pinkfish,Python > Trading & Backtesting,2025-05-12,https://github.com/fja05680/pinkfish,A backtester and spreadsheet library for security analysis.,True,False,fja05680/pinkfish -aat,Python > Trading & Backtesting,2025-12-15,https://github.com/timkpaine/aat,Async Algorithmic Trading Engine,True,False,timkpaine/aat -Backtesting.py,Python > Trading & Backtesting,,https://kernc.github.io/backtesting.py/,Backtest trading strategies in Python,False,False, -catalyst,Python > Trading & Backtesting,2021-09-22,https://github.com/enigmampc/catalyst,An Algorithmic Trading Library for Crypto-Assets in Python,True,False,enigmampc/catalyst -quantstats,Python > Trading & Backtesting,2025-09-05,https://github.com/ranaroussi/quantstats,"Portfolio analytics for quants, written in Python",True,False,ranaroussi/quantstats -qtpylib,Python > Trading & Backtesting,2021-03-24,https://github.com/ranaroussi/qtpylib,"QTPyLib, Pythonic Algorithmic Trading ",True,False,ranaroussi/qtpylib -Quantdom,Python > Trading & Backtesting,2019-03-12,https://github.com/constverum/Quantdom,Python-based framework for backtesting trading strategies & analyzing financial markets [GUI :neckbeard:],True,False,constverum/Quantdom -freqtrade,Python > Trading & Backtesting,2026-01-03,https://github.com/freqtrade/freqtrade,"Free, open source crypto trading bot",True,False,freqtrade/freqtrade -algorithmic-trading-with-python,Python > Trading & Backtesting,2021-06-01,https://github.com/chrisconlan/algorithmic-trading-with-python,"Free `pandas` and `scikit-learn` resources for trading simulation, backtesting, and machine learning on financial data.",True,False,chrisconlan/algorithmic-trading-with-python -DeepDow,Python > Trading & Backtesting,2024-01-24,https://github.com/jankrepl/deepdow,Portfolio optimization with deep learning,True,False,jankrepl/deepdow -Qlib,Python > Trading & Backtesting,2025-12-30,https://github.com/microsoft/qlib,"An AI-oriented Quantitative Investment Platform by Microsoft. Full ML pipeline of data processing, model training, back-testing; and covers the entire chain of quantitative investment: alpha seeking, risk modeling, portfolio optimization, and order execution.",True,False,microsoft/qlib -machine-learning-for-trading,Python > Trading & Backtesting,2023-03-05,https://github.com/stefan-jansen/machine-learning-for-trading,Code and resources for Machine Learning for Algorithmic Trading,True,False,stefan-jansen/machine-learning-for-trading -AlphaPy,Python > Trading & Backtesting,2025-08-24,https://github.com/ScottfreeLLC/AlphaPy,"Automated Machine Learning [AutoML] with Python, scikit-learn, Keras, XGBoost, LightGBM, and CatBoost",True,False,ScottfreeLLC/AlphaPy -jesse,Python > Trading & Backtesting,2025-12-14,https://github.com/jesse-ai/jesse,An advanced crypto trading bot written in Python,True,False,jesse-ai/jesse -rqalpha,Python > Trading & Backtesting,2025-12-01,https://github.com/ricequant/rqalpha,"A extendable, replaceable Python algorithmic backtest && trading framework supporting multiple securities.",True,False,ricequant/rqalpha -FinRL-Library,Python > Trading & Backtesting,2025-12-06,https://github.com/AI4Finance-LLC/FinRL-Library,A Deep Reinforcement Learning Library for Automated Trading in Quantitative Finance. NeurIPS 2020.,True,False,AI4Finance-LLC/FinRL-Library -bulbea,Python > Trading & Backtesting,2017-03-19,https://github.com/achillesrasquinha/bulbea,Deep Learning based Python Library for Stock Market Prediction and Modelling.,True,False,achillesrasquinha/bulbea -ib_nope,Python > Trading & Backtesting,2021-04-22,https://github.com/ajhpark/ib_nope,Automated trading system for NOPE strategy over IBKR TWS.,True,False,ajhpark/ib_nope -OctoBot,Python > Trading & Backtesting,2025-12-29,https://github.com/Drakkar-Software/OctoBot,"Open source cryptocurrency trading bot for high frequency, arbitrage, TA and social trading with an advanced web interface.",True,False,Drakkar-Software/OctoBot -bta-lib,Python > Trading & Backtesting,2020-03-11,https://github.com/mementum/bta-lib,Technical Analysis library in pandas for backtesting algotrading and quantitative analysis.,True,False,mementum/bta-lib -Stock-Prediction-Models,Python > Trading & Backtesting,2021-01-05,https://github.com/huseinzol05/Stock-Prediction-Models,Gathers machine learning and deep learning models for Stock forecasting including trading bots and simulations.,True,False,huseinzol05/Stock-Prediction-Models -TuneTA,Python > Trading & Backtesting,2023-10-13,https://github.com/jmrichardson/tuneta,TuneTA optimizes technical indicators using a distance correlation measure to a user defined target feature such as next day return.,True,False,jmrichardson/tuneta -AutoTrader,Python > Trading & Backtesting,2025-05-04,https://github.com/kieran-mackle/AutoTrader,A Python-based development platform for automated trading systems - from backtesting to optimization to livetrading.,True,False,kieran-mackle/AutoTrader -fast-trade,Python > Trading & Backtesting,2025-02-21,https://github.com/jrmeier/fast-trade,A library built with backtest portability and performance in mind for backtest trading strategies.,True,False,jrmeier/fast-trade -qf-lib,Python > Trading & Backtesting,2025-11-17,https://github.com/quarkfin/qf-lib,QF-Lib is a Python library that provides high quality tools for quantitative finance.,True,False,quarkfin/qf-lib -tda-api,Python > Trading & Backtesting,2024-06-16,https://github.com/alexgolec/tda-api,"Gather data and trade equities, options, and ETFs via TDAmeritrade.",True,False,alexgolec/tda-api -vectorbt,Python > Trading & Backtesting,2026-01-03,https://github.com/polakowo/vectorbt,"Find your trading edge, using a powerful toolkit for backtesting, algorithmic trading, and research.",True,False,polakowo/vectorbt -Lean,Python > Trading & Backtesting,2026-01-02,https://github.com/QuantConnect/Lean,"Lean Algorithmic Trading Engine by QuantConnect (Python, C#).",True,False,QuantConnect/Lean -fast-trade,Python > Trading & Backtesting,2025-02-21,https://github.com/jrmeier/fast-trade,Low code backtesting library utilizing pandas and technical analysis indicators.,True,False,jrmeier/fast-trade -pysystemtrade,Python > Trading & Backtesting,2025-11-27,https://github.com/robcarver17/pysystemtrade,"pysystemtrade is the open source version of Robert Carver's backtesting and trading engine that implements systems according to the framework outlined in his book ""Systematic Trading"", which is further developed on his [blog](https://qoppac.blogspot.com/).",True,False,robcarver17/pysystemtrade -pytrendseries,Python > Trading & Backtesting,2025-02-06,https://github.com/rafa-rod/pytrendseries,"Detect trend in time series, drawdown, drawdown within a constant look-back window , maximum drawdown, time underwater.",True,False,rafa-rod/pytrendseries -PyLOB,Python > Trading & Backtesting,2023-01-01,https://github.com/DrAshBooth/PyLOB,Fully functioning fast Limit Order Book written in Python.,True,False,DrAshBooth/PyLOB -PyBroker,Python > Trading & Backtesting,2025-12-05,https://github.com/edtechre/pybroker,Algorithmic Trading with Machine Learning.,True,False,edtechre/pybroker -OctoBot Script,Python > Trading & Backtesting,2025-12-29,https://github.com/Drakkar-Software/OctoBot-Script,A quant framework to create cryptocurrencies strategies - from backtesting to optimization to livetrading.,True,False,Drakkar-Software/OctoBot-Script -hftbacktest,Python > Trading & Backtesting,2025-12-23,https://github.com/nkaz001/hftbacktest,"A high-frequency trading and market-making backtesting tool accounts for limit orders, queue positions, and latencies, utilizing full tick data for trades and order books.",True,False,nkaz001/hftbacktest -vnpy,Python > Trading & Backtesting,2025-12-24,https://github.com/vnpy/vnpy,VeighNa is a Python-based open source quantitative trading system development framework.,True,False,vnpy/vnpy -Intelligent Trading Bot,Python > Trading & Backtesting,2025-11-02,https://github.com/asavinov/intelligent-trading-bot,Automatically generating signals and trading based on machine learning and feature engineering,True,False,asavinov/intelligent-trading-bot -fastquant,Python > Trading & Backtesting,2023-09-15,https://github.com/enzoampil/fastquant,fastquant allows you to easily backtest investment strategies with as few as 3 lines of python code.,True,False,enzoampil/fastquant -nautilus_trader,Python > Trading & Backtesting,2026-01-04,https://github.com/nautechsystems/nautilus_trader,A high-performance algorithmic trading platform and event-driven backtester.,True,False,nautechsystems/nautilus_trader -YABTE,Python > Trading & Backtesting,2024-05-11,https://github.com/bsdz/yabte,Yet Another (Python) BackTesting Engine.,True,False,bsdz/yabte -Trading Strategy,Python > Trading & Backtesting,2025-12-21,https://github.com/tradingstrategy-ai/getting-started,"TradingStrategy.ai is a market data, backtesting, live trading and investor management framework for decentralised finance",True,False,tradingstrategy-ai/getting-started -Hikyuu,Python > Trading & Backtesting,2026-01-04,https://github.com/fasiondog/hikyuu,"A base on Python/C++ open source high-performance quant framework for faster analysis and backtesting, contains the complete trading system components for reuse and combination.",True,False,fasiondog/hikyuu -rust_bt,Python > Trading & Backtesting,2025-12-28,https://github.com/jensnesten/rust_bt,"A high performance, low-latency backtesting engine for testing quantitative trading strategies on historical and live data in Rust.",True,False,jensnesten/rust_bt -Gunbot Quant,Python > Trading & Backtesting,2025-08-19,https://github.com/GuntharDeNiro/gunbot-quant,"Toolkit for quantitative trading analysis. It integrates an advanced market screener, a multi-strategy, multi-asset backtesting engine. Use with built-in GUI or through CLI.",True,False,GuntharDeNiro/gunbot-quant -StrateQueue,Python > Trading & Backtesting,2025-12-30,https://github.com/StrateQueue/StrateQueue,"An open‑source, broker‑agnostic Python library that lets you seamlessly deploy strategies from any major backtesting engine to live (or paper) trading with zero code changes and built‑in safety controls.",True,False,StrateQueue/StrateQueue -QuantLibRisks,Python > Risk Analysis,2024-04-04,https://github.com/auto-differentiation/QuantLib-Risks-Py,Fast risks with QuantLib,True,False,auto-differentiation/QuantLib-Risks-Py -XAD,Python > Risk Analysis,2024-05-21,https://github.com/auto-differentiation/xad-py,Automatic Differentation (AAD) Library,True,False,auto-differentiation/xad-py -pyfolio,Python > Risk Analysis,2020-02-28,https://github.com/quantopian/pyfolio,Portfolio and risk analytics in Python.,True,False,quantopian/pyfolio -empyrical,Python > Risk Analysis,2020-10-14,https://github.com/quantopian/empyrical,Common financial risk and performance metrics.,True,False,quantopian/empyrical -fecon235,Python > Risk Analysis,2018-12-03,https://github.com/rsvp/fecon235,"Computational tools for financial economics include: Gaussian Mixture model of leptokurtotic risk, adaptive Boltzmann portfolios.",True,False,rsvp/fecon235 -finance,Python > Risk Analysis,,https://pypi.org/project/finance/,Financial Risk Calculations. Optimized for ease of use through class construction and operator overload.,False,False, -qfrm,Python > Risk Analysis,,https://pypi.org/project/qfrm/,"Quantitative Financial Risk Management: awesome OOP tools for measuring, managing and visualizing risk of financial instruments and portfolios.",False,False, -visualize-wealth,Python > Risk Analysis,2015-06-10,https://github.com/benjaminmgross/visualize-wealth,Portfolio construction and quantitative analysis.,True,False,benjaminmgross/visualize-wealth -VisualPortfolio,Python > Risk Analysis,2017-02-28,https://github.com/wegamekinglc/VisualPortfolio,This tool is used to visualize the performance of a portfolio.,True,False,wegamekinglc/VisualPortfolio -universal-portfolios,Python > Risk Analysis,2025-09-11,https://github.com/Marigold/universal-portfolios,Collection of algorithms for online portfolio selection.,True,False,Marigold/universal-portfolios -FinQuant,Python > Risk Analysis,2023-09-03,https://github.com/fmilthaler/FinQuant,"A program for financial portfolio management, analysis and optimization.",True,False,fmilthaler/FinQuant -Empyrial,Python > Risk Analysis,2025-09-14,https://github.com/ssantoshp/Empyrial,Portfolio's risk and performance analytics and returns predictions.,True,False,ssantoshp/Empyrial -risktools,Python > Risk Analysis,2024-12-07,https://github.com/bbcho/risktools-dev,Risk tools for use within the crude and crude products trading space with partial implementation of R's PerformanceAnalytics.,True,False,bbcho/risktools-dev -Riskfolio-Lib,Python > Risk Analysis,2026-01-02,https://github.com/dcajasn/Riskfolio-Lib,Portfolio Optimization and Quantitative Strategic Asset Allocation in Python.,True,False,dcajasn/Riskfolio-Lib -empyrical-reloaded,Python > Risk Analysis,2025-07-29,https://github.com/stefan-jansen/empyrical-reloaded,Common financial risk and performance metrics. [empyrical](https://github.com/quantopian/empyrical) fork.,True,False,stefan-jansen/empyrical-reloaded -pyfolio-reloaded,Python > Risk Analysis,2025-06-02,https://github.com/stefan-jansen/pyfolio-reloaded,Portfolio and risk analytics in Python. [pyfolio](https://github.com/quantopian/pyfolio) fork.,True,False,stefan-jansen/pyfolio-reloaded -fortitudo.tech,Python > Risk Analysis,2025-12-18,https://github.com/fortitudo-tech/fortitudo.tech,Conditional Value-at-Risk (CVaR) portfolio optimization and Entropy Pooling views / stress-testing in Python.,True,False,fortitudo-tech/fortitudo.tech -quantitative-finance-tools,Python > Risk Analysis,2025-12-13,https://github.com/omichauhan-lgtm/quantitative-finance-tools,Library for portfolio optimization (MVO) and rigorous risk metrics (VaR/CVaR).,True,False,omichauhan-lgtm/quantitative-finance-tools -alphalens,Python > Factor Analysis,2020-04-27,https://github.com/quantopian/alphalens,Performance analysis of predictive alpha factors.,True,False,quantopian/alphalens -alphalens-reloaded,Python > Factor Analysis,2025-06-02,https://github.com/stefan-jansen/alphalens-reloaded,Performance analysis of predictive (alpha) stock factors.,True,False,stefan-jansen/alphalens-reloaded -Spectre,Python > Factor Analysis,2025-04-15,https://github.com/Heerozh/spectre,GPU-accelerated Factors analysis library and Backtester,True,False,Heerozh/spectre -Asset News Sentiment Analyzer,Python > Sentiment Analysis,2024-07-27,https://github.com/KVignesh122/AssetNewsSentimentAnalyzer,Sentiment analysis and report generation package for financial assets and securities utilizing GPT models.,True,False,KVignesh122/AssetNewsSentimentAnalyzer -Jupyter Quant,Python > Quant Research Environment,2024-06-14,https://github.com/gnzsnz/jupyter-quant,"A dockerized Jupyter quant research environment with preloaded tools for quant analysis, statsmodels, pymc, arch, py_vollib, zipline-reloaded, PyPortfolioOpt, etc.",True,False,gnzsnz/jupyter-quant -ARCH,Python > Time Series,2025-12-02,https://github.com/bashtage/arch,ARCH models in Python.,True,False,bashtage/arch -statsmodels,Python > Time Series,,http://statsmodels.sourceforge.net,"Python module that allows users to explore data, estimate statistical models, and perform statistical tests.",False,False, -dynts,Python > Time Series,2016-11-02,https://github.com/quantmind/dynts,Python package for timeseries analysis and manipulation.,True,False,quantmind/dynts -PyFlux,Python > Time Series,2018-12-16,https://github.com/RJT1990/pyflux,Python library for timeseries modelling and inference (frequentist and Bayesian) on models.,True,False,RJT1990/pyflux -tsfresh,Python > Time Series,2025-11-15,https://github.com/blue-yonder/tsfresh,Automatic extraction of relevant features from time series.,True,False,blue-yonder/tsfresh -hasura/quandl-metabase,Python > Time Series,,https://platform.hasura.io/hub/projects/anirudhm/quandl-metabase-time-series,Hasura quickstart to visualize Quandl's timeseries datasets with Metabase.,False,False, -Facebook Prophet,Python > Time Series,2025-10-21,https://github.com/facebook/prophet,Tool for producing high quality forecasts for time series data that has multiple seasonality with linear or non-linear growth.,True,False,facebook/prophet -tsmoothie,Python > Time Series,2023-11-23,https://github.com/cerlymarco/tsmoothie,A python library for time-series smoothing and outlier detection in a vectorized way.,True,False,cerlymarco/tsmoothie -pmdarima,Python > Time Series,2025-11-17,https://github.com/alkaline-ml/pmdarima,"A statistical library designed to fill the void in Python's time series analysis capabilities, including the equivalent of R's auto.arima function.",True,False,alkaline-ml/pmdarima -gluon-ts,Python > Time Series,2025-08-14,https://github.com/awslabs/gluon-ts,vProbabilistic time series modeling in Python.,True,False,awslabs/gluon-ts -functime,Python > Time Series,2024-06-15,https://github.com/functime-org/functime,Time-series machine learning at scale. Built with Polars for embarrassingly parallel feature extraction and forecasts on panel data.,True,False,functime-org/functime -exchange_calendars,Python > Calendars,2025-11-07,https://github.com/gerrymanoim/exchange_calendars,Stock Exchange Trading Calendars.,True,False,gerrymanoim/exchange_calendars -bizdays,Python > Calendars,2026-01-04,https://github.com/wilsonfreitas/python-bizdays,Business days calculations and utilities.,True,False,wilsonfreitas/python-bizdays -pandas_market_calendars,Python > Calendars,2025-12-28,https://github.com/rsheftel/pandas_market_calendars,Exchange calendars to use with pandas for trading applications.,True,False,rsheftel/pandas_market_calendars -yfinance,Python > Data Sources,2025-12-22,https://github.com/ranaroussi/yfinance,Yahoo! Finance market data downloader (+faster Pandas Datareader),True,False,ranaroussi/yfinance -defeatbeta-api,Python > Data Sources,2026-01-04,https://github.com/defeat-beta/defeatbeta-api,An open-source alternative to Yahoo Finance's market data APIs with higher reliability.,True,False,defeat-beta/defeatbeta-api -findatapy,Python > Data Sources,2026-01-02,https://github.com/cuemacro/findatapy,"Python library to download market data via Bloomberg, Quandl, Yahoo etc.",True,False,cuemacro/findatapy -googlefinance,Python > Data Sources,2018-09-23,https://github.com/hongtaocai/googlefinance,Python module to get real-time stock data from Google Finance API.,True,False,hongtaocai/googlefinance -yahoo-finance,Python > Data Sources,2021-12-15,https://github.com/lukaszbanasiak/yahoo-finance,Python module to get stock data from Yahoo! Finance.,True,False,lukaszbanasiak/yahoo-finance -pandas-datareader,Python > Data Sources,2025-04-03,https://github.com/pydata/pandas-datareader,"Python module to get data from various sources (Google Finance, Yahoo Finance, FRED, OECD, Fama/French, World Bank, Eurostat...) into Pandas datastructures such as DataFrame, Panel with a caching mechanism.",True,False,pydata/pandas-datareader -pandas-finance,Python > Data Sources,2025-03-07,https://github.com/davidastephens/pandas-finance,High level API for access to and analysis of financial data.,True,False,davidastephens/pandas-finance -pyhoofinance,Python > Data Sources,2016-10-07,https://github.com/innes213/pyhoofinance,Rapidly queries Yahoo Finance for multiple tickers and returns typed data for analysis.,True,False,innes213/pyhoofinance -yfinanceapi,Python > Data Sources,2020-05-26,https://github.com/Karthik005/yfinanceapi,Finance API for Python.,True,False,Karthik005/yfinanceapi -yql-finance,Python > Data Sources,2015-08-29,https://github.com/slawek87/yql-finance,"yql-finance is simple and fast. API returns stock closing prices for current period of time and current stock ticker (i.e. APPL, GOOGL).",True,False,slawek87/yql-finance -ystockquote,Python > Data Sources,2017-03-10,https://github.com/cgoldberg/ystockquote,Retrieve stock quote data from Yahoo Finance.,True,False,cgoldberg/ystockquote -wallstreet,Python > Data Sources,2024-03-09,https://github.com/mcdallas/wallstreet,Real time stock and option data.,True,False,mcdallas/wallstreet -stock_extractor,Python > Data Sources,2016-09-10,https://github.com/ZachLiuGIS/stock_extractor,General Purpose Stock Extractors from Online Resources.,True,False,ZachLiuGIS/stock_extractor -Stockex,Python > Data Sources,2021-09-15,https://github.com/cttn/Stockex,Python wrapper for Yahoo! Finance API.,True,False,cttn/Stockex -finsymbols,Python > Data Sources,2017-07-23,https://github.com/skillachie/finsymbols,"Obtains stock symbols and relating information for SP500, AMEX, NYSE, and NASDAQ.",True,False,skillachie/finsymbols -FRB,Python > Data Sources,2018-12-22,https://github.com/avelkoski/FRB,Python Client for FRED® API.,True,False,avelkoski/FRB -inquisitor,Python > Data Sources,2019-10-10,https://github.com/econdb/inquisitor,Python Interface to Econdb.com API.,True,False,econdb/inquisitor -yfi,Python > Data Sources,2016-02-12,https://github.com/nickelkr/yfi,Yahoo! YQL library.,True,False,nickelkr/yfi -chinesestockapi,Python > Data Sources,,https://pypi.org/project/chinesestockapi/,Python API to get Chinese stock price.,False,False, -exchange,Python > Data Sources,2015-07-07,https://github.com/akarat/exchange,Get current exchange rate.,True,False,akarat/exchange -ticks,Python > Data Sources,2016-01-08,https://github.com/jamescnowell/ticks,Simple command line tool to get stock ticker data.,True,False,jamescnowell/ticks -pybbg,Python > Data Sources,2015-01-20,https://github.com/bpsmith/pybbg,Python interface to Bloomberg COM APIs.,True,False,bpsmith/pybbg -ccy,Python > Data Sources,2025-12-28,https://github.com/lsbardel/ccy,Python module for currencies.,True,False,lsbardel/ccy -tushare,Python > Data Sources,,https://pypi.org/project/tushare/,A utility for crawling historical and Real-time Quotes data of China stocks.,False,False, -jsm,Python > Data Sources,,https://pypi.org/project/jsm/,Get the japanese stock market data.,False,False, -cn_stock_src,Python > Data Sources,2016-02-29,https://github.com/jealous/cn_stock_src,Utility for retrieving basic China stock data from different sources.,True,False,jealous/cn_stock_src -coinmarketcap,Python > Data Sources,2023-05-23,https://github.com/barnumbirr/coinmarketcap,Python API for coinmarketcap.,True,False,barnumbirr/coinmarketcap -after-hours,Python > Data Sources,2020-06-22,https://github.com/datawrestler/after-hours,Obtain pre market and after hours stock prices for a given symbol.,True,False,datawrestler/after-hours -bronto-python,Python > Data Sources,,https://pypi.org/project/bronto-python/,Bronto API Integration for Python.,False,False, -pytdx,Python > Data Sources,2020-04-15,https://github.com/rainx/pytdx,Python Interface for retrieving chinese stock realtime quote data from TongDaXin Nodes.,True,False,rainx/pytdx -pdblp,Python > Data Sources,2024-12-14,https://github.com/matthewgilbert/pdblp,A simple interface to integrate pandas and the Bloomberg Open API.,True,False,matthewgilbert/pdblp -tiingo,Python > Data Sources,2025-06-22,https://github.com/hydrosquall/tiingo-python,"Python interface for daily composite prices/OHLC/Volume + Real-time News Feeds, powered by the Tiingo Data Platform.",True,False,hydrosquall/tiingo-python -iexfinance,Python > Data Sources,2021-01-02,https://github.com/addisonlynch/iexfinance,Python Interface for retrieving real-time and historical prices and equities data from The Investor's Exchange.,True,False,addisonlynch/iexfinance -pyEX,Python > Data Sources,2024-02-05,https://github.com/timkpaine/pyEX,"Python interface to IEX with emphasis on pandas, support for streaming data, premium data, points data (economic, rates, commodities), and technical indicators.",True,False,timkpaine/pyEX -alpaca-trade-api,Python > Data Sources,2024-01-12,https://github.com/alpacahq/alpaca-trade-api-python,Python interface for retrieving real-time and historical prices from Alpaca API as well as trade execution.,True,False,alpacahq/alpaca-trade-api-python -metatrader5,Python > Data Sources,,https://pypi.org/project/MetaTrader5/,API Connector to MetaTrader 5 Terminal,False,False, -akshare,Python > Data Sources,2026-01-04,https://github.com/jindaxiang/akshare,"AkShare is an elegant and simple financial data interface library for Python, built for human beings! ",True,False,jindaxiang/akshare -yahooquery,Python > Data Sources,2025-05-15,https://github.com/dpguthrie/yahooquery,Python interface for retrieving data through unofficial Yahoo Finance API.,True,False,dpguthrie/yahooquery -investpy,Python > Data Sources,2022-10-02,https://github.com/alvarobartt/investpy,Financial Data Extraction from Investing.com with Python! ,True,False,alvarobartt/investpy -yliveticker,Python > Data Sources,2021-04-29,https://github.com/yahoofinancelive/yliveticker,Live stream of market data from Yahoo Finance websocket.,True,False,yahoofinancelive/yliveticker -bbgbridge,Python > Data Sources,2020-01-07,https://github.com/ran404/bbgbridge,Easy to use Bloomberg Desktop API wrapper for Python.,True,False,ran404/bbgbridge -polygon.io,Python > Data Sources,2025-12-29,https://github.com/polygon-io/client-python,A python library for Polygon.io financial data APIs.,True,False,polygon-io/client-python -alpha_vantage,Python > Data Sources,2025-07-27,https://github.com/RomelTorres/alpha_vantage,A python wrapper for Alpha Vantage API for financial data.,True,False,RomelTorres/alpha_vantage -oilpriceapi,Python > Data Sources,2025-12-27,https://github.com/OilpriceAPI/python-sdk,"Python SDK for real-time oil and commodity prices (WTI, Brent, Urals, natural gas, coal) with OpenBB integration.",True,False,OilpriceAPI/python-sdk -FinanceDataReader,Python > Data Sources,2025-12-21,https://github.com/FinanceData/FinanceDataReader,"Open Source Financial data reader for U.S, Korean, Japanese, Chinese, Vietnamese Stocks",True,False,FinanceData/FinanceDataReader -pystlouisfed,Python > Data Sources,2024-01-09,https://github.com/TomasKoutek/pystlouisfed,"Python client for Federal Reserve Bank of St. Louis API - FRED, ALFRED, GeoFRED and FRASER.",True,False,TomasKoutek/pystlouisfed -python-bcb,Python > Data Sources,2025-04-21,https://github.com/wilsonfreitas/python-bcb,Python interface to Brazilian Central Bank web services.,True,False,wilsonfreitas/python-bcb -market-prices,Python > Data Sources,2025-10-02,https://github.com/maread99/market_prices,Create meaningful OHLCV datasets from knowledge of [exchange-calendars](https://github.com/gerrymanoim/exchange_calendars) (works out-the-box with data from Yahoo Finance).,True,False,maread99/market_prices -tardis-python,Python > Data Sources,2024-12-05,https://github.com/tardis-dev/tardis-python,Python interface for Tardis.dev high frequency crypto market data,True,False,tardis-dev/tardis-python -lake-api,Python > Data Sources,2025-11-02,https://github.com/crypto-lake/lake-api,Python interface for Crypto Lake high frequency crypto market data,True,False,crypto-lake/lake-api -tessa,Python > Data Sources,2025-03-14,https://github.com/ymyke/tessa,"simple, hassle-free access to price information of financial assets (currently based on yfinance and pycoingecko), including search and a symbol class.",True,False,ymyke/tessa -pandaSDMX,Python > Data Sources,2023-02-25,https://github.com/dr-leo/pandaSDMX,"Python package that implements SDMX 2.1 (ISO 17369:2013), a format for exchange of statistical data and metadata used by national statistical agencies, central banks, and international organisations.",True,False,dr-leo/pandaSDMX -cif,Python > Data Sources,2022-06-18,https://github.com/LenkaV/CIF,"Python package that include few composite indicators, which summarize multidimensional relationships between individual economic indicators.",True,False,LenkaV/CIF -finagg,Python > Data Sources,2025-10-20,https://github.com/theOGognf/finagg,"finagg is a Python package that provides implementations of popular and free financial APIs, tools for aggregating historical data from those APIs into SQL databases, and tools for transforming aggregated data into features useful for analysis and AI/ML.",True,False,theOGognf/finagg -FinanceDatabase,Python > Data Sources,2026-01-04,https://github.com/JerBouma/FinanceDatabase,"This is a database of 300.000+ symbols containing Equities, ETFs, Funds, Indices, Currencies, Cryptocurrencies and Money Markets.",True,False,JerBouma/FinanceDatabase -Trading Strategy,Python > Data Sources,,https://github.com/tradingstrategy-ai/trading-strategy/,download price data for decentralised exchanges and lending protocols (DeFi),True,False, -datamule-python,Python > Data Sources,2026-01-04,https://github.com/john-friedman/datamule-python,A package to work with SEC data. Incorporates datamule endpoints.,True,False,john-friedman/datamule-python -Earnings Feed,Python > Data Sources,,https://earningsfeed.com/api,"Real-time SEC filings, insider trades, and institutional holdings API.",False,False, -Financial Data,Python > Data Sources,,https://financialdata.net/,Stock Market and Financial Data API.,False,False, -SaxoOpenAPI,Python > Data Sources,,https://www.developer.saxo/,Saxo Bank financial data API.,False,False, -fsynth,Python > Data Sources,2025-12-27,https://github.com/welcra/fsynth,Python library for high-fidelity unlimited synthetic financial data generation using Heston Stochastic Volatility and Merton Jump Diffusion.,True,False,welcra/fsynth -fedfred,Python > Data Sources,,https://nikhilxsunder.github.io/fedfred/,"FRED & GeoFRED Economic data API with preprocessed dataframe output in pandas/geopandas, polars/polars_st, and dask dataframes/geodataframes.",False,False, -edgar-sec,Python > Data Sources,,https://nikhilxsunder.github.io/edgar-sec/,EDGAR Financial data API with preprocessed dataclass outputs.,False,False, -xlwings,Python > Excel Integration,,https://www.xlwings.org/,Make Excel fly with Python.,False,False, -openpyxl,Python > Excel Integration,,https://openpyxl.readthedocs.io/en/latest/,Read/Write Excel 2007 xlsx/xlsm files.,False,False, -xlrd,Python > Excel Integration,2025-06-14,https://github.com/python-excel/xlrd,Library for developers to extract data from Microsoft Excel spreadsheet files.,True,False,python-excel/xlrd -xlsxwriter,Python > Excel Integration,,https://xlsxwriter.readthedocs.io/,Write files in the Excel 2007+ XLSX file format.,False,False, -xlwt,Python > Excel Integration,2018-09-16,https://github.com/python-excel/xlwt,"Library to create spreadsheet files compatible with MS Excel 97/2000/XP/2003 XLS files, on any platform.",True,False,python-excel/xlwt -DataNitro,Python > Excel Integration,,https://datanitro.com/,"DataNitro also offers full-featured Python-Excel integration, including UDFs. Trial downloads are available, but users must purchase a license.",False,False, -xlloop,Python > Excel Integration,,http://xlloop.sourceforge.net,XLLoop is an open source framework for implementing Excel user-defined functions (UDFs) on a centralised server (a function server).,False,False, -expy,Python > Excel Integration,,http://www.bnikolic.co.uk/expy/expy.html,"The ExPy add-in allows easy use of Python directly from within an Microsoft Excel spreadsheet, both to execute arbitrary code and to define new Excel functions.",False,False, -pyxll,Python > Excel Integration,,https://www.pyxll.com,PyXLL is an Excel add-in that enables you to extend Excel using nothing but Python code.,False,False, -D-Tale,Python > Visualization,2025-12-10,https://github.com/man-group/dtale,Visualizer for pandas dataframes and xarray datasets.,True,False,man-group/dtale -mplfinance,Python > Visualization,2024-04-02,https://github.com/matplotlib/mplfinance,"matplotlib utilities for the visualization, and visual analysis, of financial data.",True,False,matplotlib/mplfinance -finplot,Python > Visualization,2025-10-20,https://github.com/highfestiva/finplot,Performant and effortless finance plotting for Python.,True,False,highfestiva/finplot -finvizfinance,Python > Visualization,2026-01-03,https://github.com/lit26/finvizfinance,Finviz analysis python library.,True,False,lit26/finvizfinance -market-analy,Python > Visualization,2025-10-02,https://github.com/maread99/market_analy,Analysis and interactive charting using [market-prices](https://github.com/maread99/market_prices) and bqplot.,True,False,maread99/market_analy -QuantInvestStrats,Python > Visualization,2025-11-22,https://github.com/ArturSepp/QuantInvestStrats,"Quantitative Investment Strategies (QIS) package implements Python analytics for visualisation of financial data, performance reporting, analysis of quantitative strategies.",True,False,ArturSepp/QuantInvestStrats -xts,R > Numerical Libraries & Data Structures,2025-08-04,https://github.com/joshuaulrich/xts,"eXtensible Time Series: Provide for uniform handling of R's different time-based data classes by extending zoo, maximizing native format information preservation and allowing for user level customization and extension, while simplifying cross-class interoperability.",True,False,joshuaulrich/xts -data.table,R > Numerical Libraries & Data Structures,2026-01-03,https://github.com/Rdatatable/data.table,"Extension of data.frame: Fast aggregation of large data (e.g. 100GB in RAM), fast ordered joins, fast add/modify/delete of columns by group using no copies at all, list columns and a fast file reader (fread). Offers a natural and flexible syntax, for faster development.",True,False,Rdatatable/data.table -sparseEigen,R > Numerical Libraries & Data Structures,2018-12-22,https://github.com/dppalomar/sparseEigen,Sparse principal component analysis.,True,False,dppalomar/sparseEigen -TSdbi,R > Numerical Libraries & Data Structures,,http://tsdbi.r-forge.r-project.org/,Provides a common interface to time series databases.,False,False, -tseries,R > Numerical Libraries & Data Structures,,https://cran.r-project.org/web/packages/tseries/index.html,Time Series Analysis and Computational Finance.,False,True, -zoo,R > Numerical Libraries & Data Structures,,https://cran.r-project.org/web/packages/zoo/index.html,S3 Infrastructure for Regular and Irregular Time Series (Z's Ordered Observations).,False,True, -tis,R > Numerical Libraries & Data Structures,,https://cran.r-project.org/web/packages/tis/index.html,"Functions and S3 classes for time indexes and time indexed series, which are compatible with FAME frequencies.",False,True, -tfplot,R > Numerical Libraries & Data Structures,,https://cran.r-project.org/web/packages/tfplot/index.html,Utilities for simple manipulation and quick plotting of time series data.,False,True, -tframe,R > Numerical Libraries & Data Structures,,https://cran.r-project.org/web/packages/tframe/index.html,A kernel of functions for programming time series methods in a way that is relatively independently of the representation of time.,False,True, -IBrokers,R > Data Sources,,https://cran.r-project.org/web/packages/IBrokers/index.html,Provides native R access to Interactive Brokers Trader Workstation API.,False,True, -Rblpapi,R > Data Sources,2025-03-31,https://github.com/Rblp/Rblpapi,An R Interface to 'Bloomberg' is provided via the 'Blp API'.,True,False,Rblp/Rblpapi -Quandl,R > Data Sources,,https://www.quandl.com/tools/r,Get Financial Data Directly Into R.,False,False, -Rbitcoin,R > Data Sources,2016-10-25,https://github.com/jangorecki/Rbitcoin,"Unified markets API interface (bitstamp, kraken, btce, bitmarket).",True,False,jangorecki/Rbitcoin -GetTDData,R > Data Sources,2025-05-19,https://github.com/msperlin/GetTDData,Downloads and aggregates data for Brazilian government issued bonds directly from the website of Tesouro Direto.,True,False,msperlin/GetTDData -GetHFData,R > Data Sources,2020-06-30,https://github.com/msperlin/GetHFData,Downloads and aggregates high frequency trading data for Brazilian instruments directly from Bovespa ftp site.,True,False,msperlin/GetHFData -Reddit WallstreetBets API,R > Data Sources,,https://dashboard.nbshare.io/apps/reddit/api/,Provides daily top 50 stocks from reddit (subreddit) Wallstreetbets and their sentiments via the API.,False,False, -td,R > Data Sources,2025-10-04,https://github.com/eddelbuettel/td,Interfaces the 'twelvedata' API for stocks and (digital and standard) currencies.,True,False,eddelbuettel/td -rbcb,R > Data Sources,2024-01-23,https://github.com/wilsonfreitas/rbcb,R interface to Brazilian Central Bank web services.,True,False,wilsonfreitas/rbcb -rb3,R > Data Sources,2025-11-01,https://github.com/ropensci/rb3,A bunch of downloaders and parsers for data delivered from B3.,True,False,ropensci/rb3 -simfinapi,R > Data Sources,2025-08-13,https://github.com/matthiasgomolka/simfinapi,Makes 'SimFin' data () easily accessible in R.,True,False,matthiasgomolka/simfinapi -tidyfinance,R > Data Sources,2025-06-18,https://github.com/tidy-finance/r-tidyfinance,"Tidy Finance helper functions to download financial data and process the raw data into a structured Format (tidy data), including",True,False,tidy-finance/r-tidyfinance -RQuantLib,R > Financial Instruments and Pricing,2025-09-25,https://github.com/eddelbuettel/rquantlib,RQuantLib connects GNU R with QuantLib.,True,False,eddelbuettel/rquantlib -quantmod,R > Financial Instruments and Pricing,,https://cran.r-project.org/web/packages/quantmod/index.html,Quantitative Financial Modelling Framework.,False,True, -Rmetrics,R > Financial Instruments and Pricing,,https://www.rmetrics.org,The premier open source software solution for teaching and training quantitative finance.,False,False, -fAsianOptions,R > Financial Instruments and Pricing,,https://cran.r-project.org/web/packages/fAsianOptions/index.html,EBM and Asian Option Valuation.,False,True, -fAssets,R > Financial Instruments and Pricing,,https://cran.r-project.org/web/packages/fAssets/index.html,Analysing and Modelling Financial Assets.,False,True, -fBasics,R > Financial Instruments and Pricing,,https://cran.r-project.org/web/packages/fBasics/index.html,Markets and Basic Statistics.,False,True, -fBonds,R > Financial Instruments and Pricing,,https://cran.r-project.org/web/packages/fBonds/index.html,Bonds and Interest Rate Models.,False,True, -fExoticOptions,R > Financial Instruments and Pricing,,https://cran.r-project.org/web/packages/fExoticOptions/index.html,Exotic Option Valuation.,False,True, -fOptions,R > Financial Instruments and Pricing,,https://cran.r-project.org/web/packages/fOptions/index.html,Pricing and Evaluating Basic Options.,False,True, -fPortfolio,R > Financial Instruments and Pricing,,https://cran.r-project.org/web/packages/fPortfolio/index.html,Portfolio Selection and Optimization.,False,True, -portfolio,R > Financial Instruments and Pricing,2024-08-19,https://github.com/dgerlanc/portfolio,Analysing equity portfolios.,True,False,dgerlanc/portfolio -sparseIndexTracking,R > Financial Instruments and Pricing,2023-05-28,https://github.com/dppalomar/sparseIndexTracking,Portfolio design to track an index.,True,False,dppalomar/sparseIndexTracking -covFactorModel,R > Financial Instruments and Pricing,2019-03-25,https://github.com/dppalomar/covFactorModel,Covariance matrix estimation via factor models.,True,False,dppalomar/covFactorModel -riskParityPortfolio,R > Financial Instruments and Pricing,2022-11-15,https://github.com/dppalomar/riskParityPortfolio,Blazingly fast design of risk parity portfolios.,True,False,dppalomar/riskParityPortfolio -sde,R > Financial Instruments and Pricing,,https://cran.r-project.org/web/packages/sde/index.html,Simulation and Inference for Stochastic Differential Equations.,False,True, -YieldCurve,R > Financial Instruments and Pricing,,https://cran.r-project.org/web/packages/YieldCurve/index.html,Modelling and estimation of the yield curve.,False,True, -SmithWilsonYieldCurve,R > Financial Instruments and Pricing,,https://cran.r-project.org/web/packages/SmithWilsonYieldCurve/index.html,Constructs a yield curve by the Smith-Wilson method from a table of LIBOR and SWAP rates.,False,True, -ycinterextra,R > Financial Instruments and Pricing,,https://cran.r-project.org/web/packages/ycinterextra/index.html,Yield curve or zero-coupon prices interpolation and extrapolation.,False,True, -AmericanCallOpt,R > Financial Instruments and Pricing,,https://cran.r-project.org/web/packages/AmericanCallOpt/index.html,This package includes pricing function for selected American call options with underlying assets that generate payouts.,False,True, -VarSwapPrice,R > Financial Instruments and Pricing,,https://cran.r-project.org/web/packages/VarSwapPrice/index.html,Pricing a variance swap on an equity index.,False,True, -RND,R > Financial Instruments and Pricing,,https://cran.r-project.org/web/packages/RND/index.html,Risk Neutral Density Extraction Package.,False,True, -LSMonteCarlo,R > Financial Instruments and Pricing,,https://cran.r-project.org/web/packages/LSMonteCarlo/index.html,American options pricing with Least Squares Monte Carlo method.,False,True, -OptHedging,R > Financial Instruments and Pricing,,https://cran.r-project.org/web/packages/OptHedging/index.html,Estimation of value and hedging strategy of call and put options.,False,True, -tvm,R > Financial Instruments and Pricing,,https://cran.r-project.org/web/packages/tvm/index.html,Time Value of Money Functions.,False,True, -OptionPricing,R > Financial Instruments and Pricing,,https://cran.r-project.org/web/packages/OptionPricing/index.html,Option Pricing with Efficient Simulation Algorithms.,False,True, -credule,R > Financial Instruments and Pricing,2015-08-05,https://github.com/blenezet/credule,Credit Default Swap Functions.,True,False,blenezet/credule -derivmkts,R > Financial Instruments and Pricing,,https://cran.r-project.org/web/packages/derivmkts/index.html,Functions and R Code to Accompany Derivatives Markets.,False,True, -FinCal,R > Financial Instruments and Pricing,2025-10-30,https://github.com/felixfan/FinCal,"Package for time value of money calculation, time series analysis and computational finance.",True,False,felixfan/FinCal -r-quant,R > Financial Instruments and Pricing,2014-02-19,https://github.com/artyyouth/r-quant,R code for quantitative analysis in finance.,True,False,artyyouth/r-quant -options.studies,R > Financial Instruments and Pricing,2015-12-17,https://github.com/taylorizing/options.studies,options trading studies functions for use with options.data package and shiny.,True,False,taylorizing/options.studies -PortfolioAnalytics,R > Financial Instruments and Pricing,2025-05-11,https://github.com/braverock/PortfolioAnalytics,"Portfolio Analysis, Including Numerical Methods for Optimizationof Portfolios.",True,False,braverock/PortfolioAnalytics -fmbasics,R > Financial Instruments and Pricing,2019-12-03,https://github.com/imanuelcostigan/fmbasics,Financial Market Building Blocks.,True,False,imanuelcostigan/fmbasics -R-fixedincome,R > Financial Instruments and Pricing,2025-05-10,https://github.com/wilsonfreitas/R-fixedincome,Fixed income tools for R.,True,False,wilsonfreitas/R-fixedincome -backtest,R > Trading,,https://cran.r-project.org/web/packages/backtest/index.html,Exploring Portfolio-Based Conjectures About Financial Instruments.,False,True, -pa,R > Trading,,https://cran.r-project.org/web/packages/pa/index.html,Performance Attribution for Equity Portfolios.,False,True, -TTR,R > Trading,2025-05-13,https://github.com/joshuaulrich/TTR,Technical Trading Rules.,True,False,joshuaulrich/TTR -QuantTools,R > Trading,,https://quanttools.bitbucket.io/_site/index.html,Enhanced Quantitative Trading Modelling.,False,False, -blotter,R > Trading,2024-12-13,https://github.com/braverock/blotter,"Transaction infrastructure for defining instruments, transactions, portfolios and accounts for trading systems and simulation. Provides portfolio support for multi-asset class and multi-currency portfolios. Actively maintained and developed.",True,False,braverock/blotter -quantstrat,R > Backtesting,2023-09-14,https://github.com/braverock/quantstrat,Transaction-oriented infrastructure for constructing trading systems and simulation. Provides support for multi-asset class and multi-currency portfolios for backtesting and other financial research.,True,False,braverock/quantstrat -PerformanceAnalytics,R > Risk Analysis,2025-08-21,https://github.com/braverock/PerformanceAnalytics,Econometric tools for performance and risk analysis.,True,False,braverock/PerformanceAnalytics -FactorAnalytics,R > Factor Analysis,2024-12-12,https://github.com/braverock/FactorAnalytics,"The FactorAnalytics package contains fitting and analysis methods for the three main types of factor models used in conjunction with portfolio construction, optimization and risk management, namely fundamental factor models, time series factor models and statistical factor models.",True,False,braverock/FactorAnalytics -Expected Returns,R > Factor Analysis,2025-08-12,https://github.com/JustinMShea/ExpectedReturns,"Solutions for enhancing portfolio diversification and replications of seminal papers with R, most of which are discussed in one of the best investment references of the recent decade, Expected Returns: An Investors Guide to Harvesting Market Rewards by Antti Ilmanen.",True,False,JustinMShea/ExpectedReturns -tseries,R > Time Series,,https://cran.r-project.org/web/packages/tseries/index.html,Time Series Analysis and Computational Finance.,False,True, -fGarch,R > Time Series,,https://cran.r-project.org/web/packages/fGarch/index.html,Rmetrics - Autoregressive Conditional Heteroskedastic Modelling.,False,True, -timeSeries,R > Time Series,,https://cran.r-project.org/web/packages/timeSeries/index.html,Rmetrics - Financial Time Series Objects.,False,True, -rugarch,R > Time Series,2025-06-16,https://github.com/alexiosg/rugarch,Univariate GARCH Models.,True,False,alexiosg/rugarch -rmgarch,R > Time Series,2025-08-31,https://github.com/alexiosg/rmgarch,Multivariate GARCH Models.,True,False,alexiosg/rmgarch -tidypredict,R > Time Series,2021-09-28,https://github.com/edgararuiz/tidypredict,Run predictions inside the database .,True,False,edgararuiz/tidypredict -tidyquant,R > Time Series,2025-08-28,https://github.com/business-science/tidyquant,Bringing financial analysis to the tidyverse.,True,False,business-science/tidyquant -timetk,R > Time Series,2025-08-29,https://github.com/business-science/timetk,A toolkit for working with time series in R.,True,False,business-science/timetk -tibbletime,R > Time Series,2024-12-03,https://github.com/business-science/tibbletime,"Built on top of the tidyverse, tibbletime is an extension that allows for the creation of time aware tibbles through the setting of a time index.",True,False,business-science/tibbletime -matrixprofile,R > Time Series,2022-11-25,https://github.com/matrix-profile-foundation/matrixprofile,Time series data mining library built on top of the novel Matrix Profile data structure and algorithms.,True,False,matrix-profile-foundation/matrixprofile -garchmodels,R > Time Series,2022-08-11,https://github.com/AlbertoAlmuinha/garchmodels,A parsnip backend for GARCH models.,True,False,AlbertoAlmuinha/garchmodels -timeDate,R > Calendars,,https://cran.r-project.org/web/packages/timeDate/index.html,Chronological and Calendar Objects,False,True, -bizdays,R > Calendars,2025-01-08,https://github.com/wilsonfreitas/R-bizdays,Business days calculations and utilities,True,False,wilsonfreitas/R-bizdays -RunMat,Matlab > Alternatives,,https://runmat.org,"High performance, Open Source, MATLAB syntax runtime.",False,False, -QUANTAXIS,Matlab > FrameWorks,2025-10-26,https://github.com/yutiansut/quantaxis,Integrated Quantitative Toolbox with Matlab.,True,False,yutiansut/quantaxis -PROJ_Option_Pricing_Matlab,Matlab > FrameWorks,2024-11-19,https://github.com/jkirkby3/PROJ_Option_Pricing_Matlab,"Quant Option Pricing - Exotic/Vanilla: Barrier, Asian, European, American, Parisian, Lookback, Cliquet, Variance Swap, Swing, Forward Starting, Step, Fader",True,False,jkirkby3/PROJ_Option_Pricing_Matlab -CcyConv,Julia,2025-10-14,https://github.com/bhftbootcamp/CcyConv.jl,Currency conversion library for Julia,True,False,bhftbootcamp/CcyConv.jl -CryptoExchangeAPIs.jl,Julia,2025-11-27,https://github.com/bhftbootcamp/CryptoExchangeAPIs.jl,A Julia library for cryptocurrency exchange APIs,True,False,bhftbootcamp/CryptoExchangeAPIs.jl -Fastback.jl,Julia,2025-10-04,https://github.com/rbeeli/Fastback.jl,Blazing fast Julia backtester.,True,False,rbeeli/Fastback.jl -Lucky.jl,Julia,2025-12-15,https://github.com/oliviermilla/Lucky.jl,"Modular, asynchronous trading engine in pure Julia.",True,False,oliviermilla/Lucky.jl -QuantLib.jl,Julia,2020-02-18,https://github.com/pazzo83/QuantLib.jl,Quantlib implementation in pure Julia.,True,False,pazzo83/QuantLib.jl -Ito.jl,Julia,2017-03-21,https://github.com/aviks/Ito.jl,A Julia package for quantitative finance.,True,False,aviks/Ito.jl -LightweightCharts.jl,Julia,2025-10-22,https://github.com/bhftbootcamp/LightweightCharts.jl,Julia wrapper for Lightweight Charts™ by TradingView.,True,False,bhftbootcamp/LightweightCharts.jl -TALib.jl,Julia,2017-08-22,https://github.com/femtotrader/TALib.jl,A Julia wrapper for TA-Lib.,True,False,femtotrader/TALib.jl -Miletus.jl,Julia,2023-12-07,https://github.com/JuliaComputing/Miletus.jl,"A financial contract definition, modeling language, and valuation framework.",True,False,JuliaComputing/Miletus.jl -Temporal.jl,Julia,2021-12-28,https://github.com/dysonance/Temporal.jl,Flexible and efficient time series class & methods.,True,False,dysonance/Temporal.jl -Indicators.jl,Julia,2022-12-06,https://github.com/dysonance/Indicators.jl,Financial market technical analysis & indicators on top of Temporal.,True,False,dysonance/Indicators.jl -Strategems.jl,Julia,2021-04-06,https://github.com/dysonance/Strategems.jl,Quantitative systematic trading strategy development and backtesting.,True,False,dysonance/Strategems.jl -TimeSeries.jl,Julia,2025-12-31,https://github.com/JuliaStats/TimeSeries.jl,Time series toolkit for Julia.,True,False,JuliaStats/TimeSeries.jl -TechnicalIndicatorCharts.jl,Julia,2025-11-29,https://github.com/g-gundam/TechnicalIndicatorCharts.jl,Visualize OnlineTechnicalIndicators.jl using LightweightCharts.jl.,True,False,g-gundam/TechnicalIndicatorCharts.jl -MarketTechnicals.jl,Julia,2021-07-12,https://github.com/JuliaQuant/MarketTechnicals.jl,Technical analysis of financial time series on top of TimeSeries.,True,False,JuliaQuant/MarketTechnicals.jl -MarketData.jl,Julia,2025-11-10,https://github.com/JuliaQuant/MarketData.jl,Time series market data.,True,False,JuliaQuant/MarketData.jl -OnlineTechnicalIndicators.jl,Julia,2026-01-04,https://github.com/femtotrader/OnlineTechnicalIndicators.jl,Julia Technical Analysis Indicators via online algorithms.,True,False,femtotrader/OnlineTechnicalIndicators.jl -OnlineTechnicalIndicators,Julia,2026-01-03,https://github.com/femtotrader/OnlinePortfolioAnalytics.jl,A Julia quantitative portfolio analytics (risk / performance) via online algorithms.,True,False,femtotrader/OnlinePortfolioAnalytics.jl -OnlineResamplers.jl,Julia,2026-01-01,https://github.com/femtotrader/OnlineResamplers.jl,High-performance Julia package for real-time resampling of financial market data.,True,False,femtotrader/OnlineResamplers.jl -RiskPerf.jl,Julia,2025-10-01,https://github.com/rbeeli/RiskPerf.jl,Quantitative risk and performance analysis package for financial time series powered by the Julia language.,True,False,rbeeli/RiskPerf.jl -TimeFrames.jl,Julia,2025-11-27,https://github.com/femtotrader/TimeFrames.jl,A Julia library that defines TimeFrame (essentially for resampling TimeSeries).,True,False,femtotrader/TimeFrames.jl -DataFrames.jl,Julia,2025-12-08,https://github.com/JuliaData/DataFrames.jl,In-memory tabular data in Julia,True,False,JuliaData/DataFrames.jl -TSFrames.jl,Julia,2024-06-18,https://github.com/xKDR/TSFrames.jl,Handle timeseries data on top of the powerful and mature DataFrames.jl,True,False,xKDR/TSFrames.jl -TimeArrays.jl,Julia,2025-10-15,https://github.com/bhftbootcamp/TimeArrays.jl,Time series handling for Julia,True,False,bhftbootcamp/TimeArrays.jl -Strata,Java,,http://strata.opengamma.io/,Modern open-source analytics and market risk library designed and written in Java.,False,False, -JQuantLib,Java,2016-02-26,https://github.com/frgomes/jquantlib,"JQuantLib is a free, open-source, comprehensive framework for quantitative finance, written in 100% Java.",True,False,frgomes/jquantlib -finmath.net,Java,,http://finmath.net,Java library with algorithms and methodologies related to mathematical finance.,False,False, -quantcomponents,Java,2015-10-07,https://github.com/lsgro/quantcomponents,Free Java components for Quantitative Finance and Algorithmic Trading.,True,False,lsgro/quantcomponents -DRIP,Java,,https://lakshmidrip.github.io/DRIP,"Fixed Income, Asset Allocation, Transaction Cost Analysis, XVA Metrics Libraries.",False,False, -ta4j,Java,2025-12-30,https://github.com/ta4j/ta4j,A Java library for technical analysis.,True,False,ta4j/ta4j -finance.js,JavaScript,2018-10-11,https://github.com/ebradyjobory/finance.js,A JavaScript library for common financial calculations.,True,False,ebradyjobory/finance.js -portfolio-allocation,JavaScript,2022-08-11,https://github.com/lequant40/portfolio_allocation_js,"PortfolioAllocation is a JavaScript library designed to help constructing financial portfolios made of several assets: bonds, commodities, cryptocurrencies, currencies, exchange traded funds (ETFs), mutual funds, stocks...",True,False,lequant40/portfolio_allocation_js -Ghostfolio,JavaScript,2026-01-04,https://github.com/ghostfolio/ghostfolio,"Wealth management software to keep track of financial assets like stocks, ETFs or cryptocurrencies and make solid, data-driven investment decisions.",True,False,ghostfolio/ghostfolio -IndicatorTS,JavaScript,2025-02-26,https://github.com/cinar/indicatorts,"Indicator is a TypeScript module providing various stock technical analysis indicators, strategies, and a backtest framework for trading.",True,False,cinar/indicatorts -chart-patterns,JavaScript,error,https://github.com/focus1691/chart-patterns,"Technical analysis library for Market Profile, Volume Profile, Stacked Imbalances and High Volume Node indicators.",True,False,focus1691/chart-patterns -orderflow,JavaScript,2025-03-31,https://github.com/focus1691/orderflow,Orderflow trade aggregator for building Footprint Candles from exchange websocket data.,True,False,focus1691/orderflow -ccxt,JavaScript,2026-01-02,https://github.com/ccxt/ccxt,A JavaScript / Python / PHP cryptocurrency trading API with support for more than 100 bitcoin/altcoin exchanges.,True,False,ccxt/ccxt -PENDAX,JavaScript,2024-05-09,https://github.com/CompendiumFi/PENDAX-SDK,"Javascript SDK for Trading/Data API and Websockets for FTX, FTXUS, OKX, Bybit, & More.",True,False,CompendiumFi/PENDAX-SDK -QUANTAXIS_Webkit,JavaScript > Data Visualization,2017-07-30,https://github.com/yutiansut/QUANTAXIS_Webkit,An awesome visualization center based on quantaxis.,True,False,yutiansut/QUANTAXIS_Webkit -quantfin,Haskell,2019-04-06,https://github.com/boundedvariation/quantfin,quant finance in pure haskell.,True,False,boundedvariation/quantfin -Haxcel,Haskell,2022-09-13,https://github.com/MarcusRainbow/Haxcel,Excel Addin for Haskell.,True,False,MarcusRainbow/Haxcel -Ffinar,Haskell,2021-11-26,https://github.com/MarcusRainbow/Ffinar,A financial maths library in Haskell.,True,False,MarcusRainbow/Ffinar -QuantScale,Scala,2014-01-14,https://github.com/choucrifahed/quantscale,Scala Quantitative Finance Library.,True,False,choucrifahed/quantscale -Scala Quant,Scala,2017-05-06,https://github.com/frankcash/Scala-Quant,Scala library for working with stock data from IFTTT recipes or Google Finance.,True,False,frankcash/Scala-Quant -Jiji,Ruby,2019-01-22,https://github.com/unageanu/jiji2,Open Source Forex algorithmic trading framework using OANDA REST API.,True,False,unageanu/jiji2 -Tai,Elixir/Erlang,2024-12-06,https://github.com/fremantle-capital/tai,"Open Source composable, real time, market data and trade execution toolkit.",True,False,fremantle-capital/tai -Workbench,Elixir/Erlang,2022-06-06,https://github.com/fremantle-industries/workbench,From Idea to Execution - Manage your trading operation across a globally distributed cluster,True,False,fremantle-industries/workbench -Prop,Elixir/Erlang,2022-06-06,https://github.com/fremantle-industries/prop,"An open and opinionated trading platform using productive & familiar open source libraries and tools for strategy research, execution and operation.",True,False,fremantle-industries/prop -Kelp,Golang,2021-11-26,https://github.com/stellar/kelp,Kelp is an open-source Golang algorithmic cryptocurrency trading bot that runs on centralized exchanges and Stellar DEX (command-line usage and desktop GUI).,True,False,stellar/kelp -marketstore,Golang,error,https://github.com/alpacahq/marketstore,DataFrame Server for Financial Timeseries Data.,True,False,alpacahq/marketstore -IndicatorGo,Golang,2025-09-27,https://github.com/cinar/indicator,"IndicatorGo is a Golang module providing various stock technical analysis indicators, strategies, and a backtest framework for trading.",True,False,cinar/indicator -QuantLib,CPP,2026-01-03,https://github.com/lballabio/QuantLib,The QuantLib project is aimed at providing a comprehensive software framework for quantitative finance.,True,False,lballabio/QuantLib -QuantLibRisks,CPP,2025-09-28,https://github.com/auto-differentiation/QuantLib-Risks-Cpp,Fast risks with QuantLib in C++,True,False,auto-differentiation/QuantLib-Risks-Cpp -XAD,CPP,2025-12-31,https://github.com/auto-differentiation/xad,Automatic Differentation (AAD) Library,True,False,auto-differentiation/xad -TradeFrame,CPP,2026-01-04,https://github.com/rburkholder/trade-frame,C++ 17 based framework/library (with sample applications) for testing options based automated trading ideas using DTN IQ real time data feed and Interactive Brokers (TWS API) for trade execution. Comes with built-in [Option Greeks/IV](https://github.com/rburkholder/trade-frame/tree/master/lib/TFOptions) calculation library.,True,False,rburkholder/trade-frame -Hikyuu,CPP,2026-01-04,https://github.com/fasiondog/hikyuu,"A base on Python/C++ open source high-performance quant framework for faster analysis and backtesting, contains the complete trading system components for reuse and combination. You can use python or c++ freely.",True,False,fasiondog/hikyuu -QuantLib,Frameworks,2026-01-03,https://github.com/lballabio/QuantLib,The QuantLib project is aimed at providing a comprehensive software framework for quantitative finance.,True,False,lballabio/QuantLib -JQuantLib,Frameworks,2016-02-26,https://github.com/frgomes/jquantlib,Java port.,True,False,frgomes/jquantlib -RQuantLib,Frameworks,2025-09-25,https://github.com/eddelbuettel/rquantlib,R port.,True,False,eddelbuettel/rquantlib -QuantLibAddin,Frameworks,,https://www.quantlib.org/quantlibaddin/,Excel support.,False,False, -QuantLibXL,Frameworks,,https://www.quantlib.org/quantlibxl/,Excel support.,False,False, -QLNet,Frameworks,2025-12-23,https://github.com/amaggiulli/qlnet,.Net port.,True,False,amaggiulli/qlnet -PyQL,Frameworks,2025-08-20,https://github.com/enthought/pyql,Python port.,True,False,enthought/pyql -QuantLib.jl,Frameworks,2020-02-18,https://github.com/pazzo83/QuantLib.jl,Julia port.,True,False,pazzo83/QuantLib.jl -QuantLib-Python Documentation,Frameworks,,https://quantlib-python-docs.readthedocs.io/,Documentation for the Python bindings for the QuantLib library,False,False, -TA-Lib,Frameworks,,https://ta-lib.org,perform technical analysis of financial market data.,False,False, -Portfolio Optimizer,Frameworks,,https://portfoliooptimizer.io/,Portfolio Optimizer is a Web API for portfolio analysis and optimization.,False,False, -QuantConnect,CSharp,2026-01-02,https://github.com/QuantConnect/Lean,Lean Engine is an open-source fully managed C# algorithmic trading engine built for desktop and cloud usage.,True,False,QuantConnect/Lean -StockSharp,CSharp,2026-01-02,https://github.com/StockSharp/StockSharp,"Algorithmic trading and quantitative trading open source platform to develop trading robots (stock markets, forex, crypto, bitcoins, and options).",True,False,StockSharp/StockSharp -TDAmeritrade.DotNetCore,CSharp,2023-03-10,https://github.com/NVentimiglia/TDAmeritrade.DotNetCore,"Free, open-source .NET Client for the TD Ameritrade Trading Platform. Helps developers integrate TD Ameritrade API into custom trading solutions.",True,False,NVentimiglia/TDAmeritrade.DotNetCore -QuantMath,Rust,2020-05-28,https://github.com/MarcusRainbow/QuantMath,Financial maths library for risk-neutral pricing and risk,True,False,MarcusRainbow/QuantMath -Barter,Rust,2025-10-17,https://github.com/barter-rs/barter-rs,Open-source Rust framework for building event-driven live-trading & backtesting systems,True,False,barter-rs/barter-rs -LFEST,Rust,2025-10-23,https://github.com/MathisWellmann/lfest-rs,Simulated perpetual futures exchange to trade your strategy against.,True,False,MathisWellmann/lfest-rs -TradeAggregation,Rust,2025-07-08,https://github.com/MathisWellmann/trade_aggregation-rs,Aggregate trades into user-defined candles using information driven rules.,True,False,MathisWellmann/trade_aggregation-rs -SlidingFeatures,Rust,2025-08-24,https://github.com/MathisWellmann/sliding_features-rs,Chainable tree-like sliding windows for signal processing and technical analysis.,True,False,MathisWellmann/sliding_features-rs -RustQuant,Rust,2025-09-01,https://github.com/avhz/RustQuant,Quantitative finance library written in Rust.,True,False,avhz/RustQuant -finalytics,Rust,2025-10-23,https://github.com/Nnamdi-sys/finalytics,A rust library for financial data analysis.,True,False,Nnamdi-sys/finalytics -RunMat,Rust,2025-12-30,https://github.com/runmat-org/runmat,Rust runtime for MATLAB-syntax array math with automatic CPU/GPU execution and fused kernels for quant simulations.,True,False,runmat-org/runmat -Auto-Differentiation Website,"Reproducing Works, Training & Books",,https://auto-differentiation.github.io/,Background and resources on Automatic Differentiation (AD) / Adjoint Algorithmic Differentitation (AAD).,False,False, -Derman Papers,"Reproducing Works, Training & Books",2017-10-21,https://github.com/MarcosCarreira/DermanPapers,Notebooks that replicate original quantitative finance papers from Emanuel Derman.,True,False,MarcosCarreira/DermanPapers -ML-Quant,"Reproducing Works, Training & Books",,https://www.ml-quant.com/,"Top Quant resources like ArXiv (sanity), SSRN, RePec, Journals, Podcasts, Videos, and Blogs.",False,False, -volatility-trading,"Reproducing Works, Training & Books",2024-10-21,https://github.com/jasonstrimpel/volatility-trading,A complete set of volatility estimators based on Euan Sinclair's Volatility Trading.,True,False,jasonstrimpel/volatility-trading -quant,"Reproducing Works, Training & Books",2015-07-14,https://github.com/paulperry/quant,"Quantitative Finance and Algorithmic Trading exhaust; mostly ipython notebooks based on Quantopian, Zipline, or Pandas.",True,False,paulperry/quant -fecon235,"Reproducing Works, Training & Books",2018-12-03,https://github.com/rsvp/fecon235,Open source project for software tools in financial economics. Many jupyter notebook to verify theoretical ideas and practical methods interactively.,True,False,rsvp/fecon235 -Quantitative-Notebooks,"Reproducing Works, Training & Books",2020-07-02,https://github.com/LongOnly/Quantitative-Notebooks,"Educational notebooks on quantitative finance, algorithmic trading, financial modelling and investment strategy",True,False,LongOnly/Quantitative-Notebooks -QuantEcon,"Reproducing Works, Training & Books",,https://quantecon.org/,"Lecture series on economics, finance, econometrics and data science; QuantEcon.py, QuantEcon.jl, notebooks",False,False, -FinanceHub,"Reproducing Works, Training & Books",2021-05-25,https://github.com/Finance-Hub/FinanceHub,Resources for Quantitative Finance,True,False,Finance-Hub/FinanceHub -Python_Option_Pricing,"Reproducing Works, Training & Books",2025-05-13,https://github.com/dedwards25/Python_Option_Pricing,"An library to price financial options written in Python. Includes: Black Scholes, Black 76, Implied Volatility, American, European, Asian, Spread Options.",True,False,dedwards25/Python_Option_Pricing -python-training,"Reproducing Works, Training & Books",2023-11-27,https://github.com/jpmorganchase/python-training,J.P. Morgan's Python training for business analysts and traders.,True,False,jpmorganchase/python-training -Stock_Analysis_For_Quant,"Reproducing Works, Training & Books",2025-05-04,https://github.com/LastAncientOne/Stock_Analysis_For_Quant,"Different Types of Stock Analysis in Excel, Matlab, Power BI, Python, R, and Tableau.",True,False,LastAncientOne/Stock_Analysis_For_Quant -algorithmic-trading-with-python,"Reproducing Works, Training & Books",2021-06-01,https://github.com/chrisconlan/algorithmic-trading-with-python,Source code for Algorithmic Trading with Python (2020) by Chris Conlan.,True,False,chrisconlan/algorithmic-trading-with-python -MEDIUM_NoteBook,"Reproducing Works, Training & Books",2024-09-22,https://github.com/cerlymarco/MEDIUM_NoteBook,Repository containing notebooks of [cerlymarco](https://github.com/cerlymarco)'s posts on Medium.,True,False,cerlymarco/MEDIUM_NoteBook -QuantFinance,"Reproducing Works, Training & Books",2025-09-02,https://github.com/PythonCharmers/QuantFinance,Training materials in quantitative finance.,True,False,PythonCharmers/QuantFinance -IPythonScripts,"Reproducing Works, Training & Books",2018-11-18,https://github.com/mgroncki/IPythonScripts,"Tutorials about Quantitative Finance in Python and QuantLib: Pricing, xVAs, Hedging, Portfolio Optimisation, Machine Learning and Deep Learning.",True,False,mgroncki/IPythonScripts -Computational-Finance-Course,"Reproducing Works, Training & Books",2024-03-01,https://github.com/LechGrzelak/Computational-Finance-Course,Materials for the course of Computational Finance.,True,False,LechGrzelak/Computational-Finance-Course -Machine-Learning-for-Asset-Managers,"Reproducing Works, Training & Books",2025-01-29,https://github.com/emoen/Machine-Learning-for-Asset-Managers,"Implementation of code snippets, exercises and application to live data from Machine Learning for Asset Managers (Elements in Quantitative Finance) written by Prof. Marcos López de Prado.",True,False,emoen/Machine-Learning-for-Asset-Managers -Python-for-Finance-Cookbook,"Reproducing Works, Training & Books",2025-12-15,https://github.com/PacktPublishing/Python-for-Finance-Cookbook,"Python for Finance Cookbook, published by Packt.",True,False,PacktPublishing/Python-for-Finance-Cookbook -modelos_vol_derivativos,"Reproducing Works, Training & Books",2023-08-19,https://github.com/ysaporito/modelos_vol_derivativos,"""Modelos de Volatilidade para Derivativos"" book's Jupyter notebooks",True,False,ysaporito/modelos_vol_derivativos -NMOF,"Reproducing Works, Training & Books",2025-10-27,https://github.com/enricoschumann/NMOF,"Functions, examples and data from the first and the second edition of ""Numerical Methods and Optimization in Finance"" by M. Gilli, D. Maringer and E. Schumann (2019, ISBN:978-0128150658).",True,False,enricoschumann/NMOF -py4fi2nd,"Reproducing Works, Training & Books",2025-06-06,https://github.com/yhilpisch/py4fi2nd,"Jupyter Notebooks and code for Python for Finance (2nd ed., O'Reilly) by Yves Hilpisch.",True,False,yhilpisch/py4fi2nd -aiif,"Reproducing Works, Training & Books",2023-10-09,https://github.com/yhilpisch/aiif,Jupyter Notebooks and code for the book Artificial Intelligence in Finance (O'Reilly) by Yves Hilpisch.,True,False,yhilpisch/aiif -py4at,"Reproducing Works, Training & Books",2023-10-09,https://github.com/yhilpisch/py4at,Jupyter Notebooks and code for the book Python for Algorithmic Trading (O'Reilly) by Yves Hilpisch.,True,False,yhilpisch/py4at -dawp,"Reproducing Works, Training & Books",2021-02-22,https://github.com/yhilpisch/dawp,Jupyter Notebooks and code for Derivatives Analytics with Python (Wiley Finance) by Yves Hilpisch.,True,False,yhilpisch/dawp -dx,"Reproducing Works, Training & Books",2025-04-05,https://github.com/yhilpisch/dx,DX Analytics | Financial and Derivatives Analytics with Python.,True,False,yhilpisch/dx -QuantFinanceBook,"Reproducing Works, Training & Books",2025-04-14,https://github.com/LechGrzelak/QuantFinanceBook,Quantitative Finance book.,True,False,LechGrzelak/QuantFinanceBook -rough_bergomi,"Reproducing Works, Training & Books",2018-09-17,https://github.com/ryanmccrickerd/rough_bergomi,A Python implementation of the rough Bergomi model.,True,False,ryanmccrickerd/rough_bergomi -frh-fx,"Reproducing Works, Training & Books",2018-05-24,https://github.com/ryanmccrickerd/frh-fx,A python implementation of the fast-reversion Heston model of Mechkov for FX purposes.,True,False,ryanmccrickerd/frh-fx -Value Investing Studies,"Reproducing Works, Training & Books",2021-10-26,https://github.com/euclidjda/value-investing-studies,A collection of data analysis studies that examine the performance and characteristics of value investing over long periods of time.,True,False,euclidjda/value-investing-studies -Machine Learning Asset Management,"Reproducing Works, Training & Books",2021-12-17,https://github.com/firmai/machine-learning-asset-management,Machine Learning in Asset Management (by @firmai).,True,False,firmai/machine-learning-asset-management -Deep Learning Machine Learning Stock,"Reproducing Works, Training & Books",2024-03-01,https://github.com/LastAncientOne/Deep-Learning-Machine-Learning-Stock,Deep Learning and Machine Learning stocks represent a promising long-term or short-term opportunity for investors and traders.,True,False,LastAncientOne/Deep-Learning-Machine-Learning-Stock -Technical Analysis and Feature Engineering,"Reproducing Works, Training & Books",2024-02-16,https://github.com/jo-cho/Technical_Analysis_and_Feature_Engineering,Feature Engineering and Feature Importance of Machine Learning in Financial Market.,True,False,jo-cho/Technical_Analysis_and_Feature_Engineering -Differential Machine Learning and Axes that matter by Brian Huge and Antoine Savine,"Reproducing Works, Training & Books",2022-10-05,https://github.com/differential-machine-learning/notebooks,"Implement, demonstrate, reproduce and extend the results of the Risk articles 'Differential Machine Learning' (2020) and 'PCA with a Difference' (2021) by Huge and Savine, and cover implementation details left out from the papers.",True,False,differential-machine-learning/notebooks -systematictradingexamples,"Reproducing Works, Training & Books",2020-07-22,https://github.com/robcarver17/systematictradingexamples,Examples of code related to book [Systematic Trading](www.systematictrading.org) and [blog](http://qoppac.blogspot.com),True,False,robcarver17/systematictradingexamples -pysystemtrade_examples,"Reproducing Works, Training & Books",2018-02-21,https://github.com/robcarver17/pysystemtrade_examples,Examples using pysystemtrade for Robert Carver's [blog](http://qoppac.blogspot.com).,True,False,robcarver17/pysystemtrade_examples -ML_Finance_Codes,"Reproducing Works, Training & Books",2020-06-13,https://github.com/mfrdixon/ML_Finance_Codes,Machine Learning in Finance: From Theory to Practice Book,True,False,mfrdixon/ML_Finance_Codes -Hands-On Machine Learning for Algorithmic Trading,"Reproducing Works, Training & Books",2023-01-18,https://github.com/packtpublishing/hands-on-machine-learning-for-algorithmic-trading,"Hands-On Machine Learning for Algorithmic Trading, published by Packt",True,False,packtpublishing/hands-on-machine-learning-for-algorithmic-trading -financialnoob-misc,"Reproducing Works, Training & Books",2024-08-26,https://github.com/financialnoob/misc,Codes from @financialnoob's posts,True,False,financialnoob/misc -MesoSim Options Trading Strategy Library,"Reproducing Works, Training & Books",2024-04-06,https://github.com/deltaray-io/strategy-library,Free and public Options Trading strategy library for MesoSim. ,True,False,deltaray-io/strategy-library -Quant-Finance-With-Python-Code,"Reproducing Works, Training & Books",2023-11-16,https://github.com/lingyixu/Quant-Finance-With-Python-Code,Repo for code examples in Quantitative Finance with Python by Chris Kelliher,True,False,lingyixu/Quant-Finance-With-Python-Code -QuantFinanceTraining,"Reproducing Works, Training & Books",2024-02-20,https://github.com/JoaoJungblut/QuantFinanceTraining,"This repository contains codes that were executed during my training in the CQF (Certificate in Quantitative Finance). The codes are organized by class, facilitating navigation and reference.",True,False,JoaoJungblut/QuantFinanceTraining -Statistical-Learning-based-Portfolio-Optimization,"Reproducing Works, Training & Books",error,https://github.com/YannickKae/Statistical-Learning-based-Portfolio-Optimization,"This R Shiny App utilizes the Hierarchical Equal Risk Contribution (HERC) approach, a modern portfolio optimization method developed by Raffinot (2018).",True,False,YannickKae/Statistical-Learning-based-Portfolio-Optimization -book_irds3,"Reproducing Works, Training & Books",2022-10-29,https://github.com/attack68/book_irds3,Code repository for Pricing and Trading Interest Rate Derivatives.,True,False,attack68/book_irds3 -Autoencoder-Asset-Pricing-Models,"Reproducing Works, Training & Books",2025-08-17,https://github.com/RichardS0268/Autoencoder-Asset-Pricing-Models,"Reimplementation of Autoencoder Asset Pricing Models ([GKX, 2019](https://papers.ssrn.com/sol3/papers.cfm?abstract_id=3335536)).",True,False,RichardS0268/Autoencoder-Asset-Pricing-Models -Finance,"Reproducing Works, Training & Books",2025-05-12,https://github.com/shashankvemuri/Finance,"150+ quantitative finance Python programs to help you gather, manipulate, and analyze stock market data.",True,False,shashankvemuri/Finance -101_formulaic_alphas,"Reproducing Works, Training & Books",2022-07-11,https://github.com/ram-ki/101_formulaic_alphas,Implementation of [101 formulaic alphas](https://arxiv.org/ftp/arxiv/papers/1601/1601.00991.pdf) using qstrader.,True,False,ram-ki/101_formulaic_alphas -Tidy Finance,"Reproducing Works, Training & Books",,https://www.tidy-finance.org/,"An opinionated approach to empirical research in financial economics - a fully transparent, open-source code base in multiple programming languages (Python and R) to enable the reproducible implementation of financial research projects for students and practitioners.",False,False, -RoughVolatilityWorkshop,"Reproducing Works, Training & Books",2025-09-06,https://github.com/jgatheral/RoughVolatilityWorkshop,2024 QuantMind's Rough Volatility Workshop lectures.,True,False,jgatheral/RoughVolatilityWorkshop -AFML,"Reproducing Works, Training & Books",2024-09-05,https://github.com/boyboi86/AFML,All the answers for exercises from Advances in Financial Machine Learning by Dr Marco Lopez de Parodo.,True,False,boyboi86/AFML -AlgoTradingLib,"Reproducing Works, Training & Books",2025-12-27,https://github.com/usdaud/algotradinglib.github.io,"A catalog of algorithmic trading libraries, frameworks, strategies, and educational materials.",True,False,usdaud/algotradinglib.github.io +project,language,category,section,section_slug,last_commit,stars,url,description,github,cran,pypi,commercial,repo +numpy,Python,Numerical Libraries & Data Structures,Numerical Libraries & Data Structures,numerical-libraries-data-structures,2026-03-22,31638,https://www.numpy.org,NumPy is the fundamental package for scientific computing with Python. [GitHub](https://github.com/numpy/numpy),True,False,False,False,numpy/numpy +scipy,Python,Numerical Libraries & Data Structures,Numerical Libraries & Data Structures,numerical-libraries-data-structures,2026-03-21,14552,https://www.scipy.org,"SciPy (pronounced “Sigh Pie”) is a Python-based ecosystem of open-source software for mathematics, science, and engineering. [GitHub](https://github.com/scipy/scipy)",True,False,False,False,scipy/scipy +pandas,Python,Numerical Libraries & Data Structures,Numerical Libraries & Data Structures,numerical-libraries-data-structures,2026-03-22,48216,https://pandas.pydata.org,"pandas is an open source, BSD-licensed library providing high-performance, easy-to-use data structures and data analysis tools for the Python programming language. [GitHub](https://github.com/pandas-dev/pandas)",True,False,False,False,pandas-dev/pandas +polars,Python,Numerical Libraries & Data Structures,Numerical Libraries & Data Structures,numerical-libraries-data-structures,2026-03-20,37826,https://docs.pola.rs/,Polars is a blazingly fast DataFrame library for manipulating structured data. [GitHub](https://github.com/pola-rs/polars),True,False,False,False,pola-rs/polars +quantdsl,Python,Numerical Libraries & Data Structures,Numerical Libraries & Data Structures,numerical-libraries-data-structures,2017-10-26,377,https://github.com/johnbywater/quantdsl,Domain specific language for quantitative analytics in finance and trading.,True,False,False,False,johnbywater/quantdsl +statistics,Python,Numerical Libraries & Data Structures,Numerical Libraries & Data Structures,numerical-libraries-data-structures,,0,https://docs.python.org/3/library/statistics.html,Builtin Python library for all basic statistical calculations.,False,False,False,False, +sympy,Python,Numerical Libraries & Data Structures,Numerical Libraries & Data Structures,numerical-libraries-data-structures,2026-03-22,14500,https://www.sympy.org/,SymPy is a Python library for symbolic mathematics. [GitHub](https://github.com/sympy/sympy),True,False,False,False,sympy/sympy +pymc3,Python,Numerical Libraries & Data Structures,Numerical Libraries & Data Structures,numerical-libraries-data-structures,2026-03-04,9541,https://docs.pymc.io/,Probabilistic Programming in Python: Bayesian Modeling and Probabilistic Machine Learning with Theano. [GitHub](https://github.com/pymc-devs/pymc),True,False,False,False,pymc-devs/pymc +modelx,Python,Numerical Libraries & Data Structures,Numerical Libraries & Data Structures,numerical-libraries-data-structures,2026-02-16,122,https://docs.modelx.io/,Python reimagination of spreadsheets as formula-centric objects that are interoperable with pandas. [GitHub](https://github.com/fumitoh/modelx),True,False,False,False,fumitoh/modelx +ArcticDB,Python,Numerical Libraries & Data Structures,Numerical Libraries & Data Structures,numerical-libraries-data-structures,2026-03-20,2224,https://github.com/man-group/ArcticDB,High performance datastore for time series and tick data.,True,False,False,False,man-group/ArcticDB +pmxt,Python,Numerical Libraries & Data Structures,Numerical Libraries & Data Structures,numerical-libraries-data-structures,2026-03-22,1139,https://github.com/pmxt-dev/pmxt,"The CCXT for prediction markets. A unified API for trading on Polymarket, Kalshi, and more.",True,False,False,False,pmxt-dev/pmxt +OpenBB Terminal,Python,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2026-03-19,63423,https://github.com/OpenBB-finance/OpenBBTerminal,Terminal for investment research for everyone.,True,False,False,False,OpenBB-finance/OpenBBTerminal +Fincept Terminal,Python,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2026-03-21,2856,https://github.com/Fincept-Corporation/FinceptTerminal,Advance Data Based A.I Terminal for all Types of Financial Asset Research.,True,False,False,False,Fincept-Corporation/FinceptTerminal +PyQL,Python,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2025-08-20,1261,https://github.com/enthought/pyql,QuantLib's Python port.,True,False,False,False,enthought/pyql +pyfin,Python,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2014-12-03,316,https://github.com/opendoor-labs/pyfin,Basic options pricing in Python. *ARCHIVED*,True,False,False,False,opendoor-labs/pyfin +vollib,Python,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2023-04-01,929,https://github.com/vollib/vollib,"vollib is a python library for calculating option prices, implied volatility and greeks.",True,False,False,False,vollib/vollib +QuantPy,Python,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2017-11-28,973,https://github.com/jsmidt/QuantPy,A framework for quantitative finance In python.,True,False,False,False,jsmidt/QuantPy +Finance-Python,Python,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2024-01-01,873,https://github.com/alpha-miner/Finance-Python,Python tools for Finance.,True,False,False,False,alpha-miner/Finance-Python +ffn,Python,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2026-03-21,2519,https://github.com/pmorissette/ffn,A financial function library for Python.,True,False,False,False,pmorissette/ffn +pynance,Python,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2021-02-03,440,https://github.com/GriffinAustin/pynance,Lightweight Python library for assembling and analyzing financial data.,True,False,False,False,GriffinAustin/pynance +tia,Python,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2017-06-05,430,https://github.com/bpsmith/tia,Toolkit for integration and analysis.,True,False,False,False,bpsmith/tia +pysabr,Python,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2022-04-21,592,https://github.com/ynouri/pysabr,SABR model Python implementation.,True,False,False,False,ynouri/pysabr +FinancePy,Python,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2026-03-11,2837,https://github.com/domokane/FinancePy,"A Python Finance Library that focuses on the pricing and risk-management of Financial Derivatives, including fixed-income, equity, FX and credit derivatives.",True,False,False,False,domokane/FinancePy +gs-quant,Python,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2026-03-19,9999,https://github.com/goldmansachs/gs-quant,Python toolkit for quantitative finance,True,False,False,False,goldmansachs/gs-quant +willowtree,Python,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2018-07-14,344,https://github.com/federicomariamassari/willowtree,Robust and flexible Python implementation of the willow tree lattice for derivatives pricing.,True,False,False,False,federicomariamassari/willowtree +financial-engineering,Python,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2017-11-20,500,https://github.com/federicomariamassari/financial-engineering,"Applications of Monte Carlo methods to financial engineering projects, in Python.",True,False,False,False,federicomariamassari/financial-engineering +optlib,Python,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2022-11-18,1347,https://github.com/dbrojas/optlib,A library for financial options pricing written in Python.,True,False,False,False,dbrojas/optlib +tf-quant-finance,Python,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2026-02-12,5265,https://github.com/google/tf-quant-finance,High-performance TensorFlow library for quantitative finance.,True,False,False,False,google/tf-quant-finance +Q-Fin,Python,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2023-04-07,582,https://github.com/RomanMichaelPaolucci/Q-Fin,A Python library for mathematical finance.,True,False,False,False,RomanMichaelPaolucci/Q-Fin +Quantsbin,Python,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2021-05-23,612,https://github.com/quantsbin/Quantsbin,"Tools for pricing and plotting of vanilla option prices, greeks and various other analysis around them.",True,False,False,False,quantsbin/Quantsbin +finoptions,Python,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2024-02-01,295,https://github.com/bbcho/finoptions-dev,Complete python implementation of R package fOptions with partial implementation of fExoticOptions for pricing various options.,True,False,False,False,bbcho/finoptions-dev +pypme,Python,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2026-01-16,13,https://github.com/ymyke/pypme,PME (Public Market Equivalent) calculation.,True,False,False,False,ymyke/pypme +AbsBox,Python,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2026-03-17,64,https://github.com/yellowbean/AbsBox,A Python based library to model cashflow for structured product like Asset-backed securities (ABS) and Mortgage-backed securities (MBS).,True,False,False,False,yellowbean/AbsBox +Intrinsic-Value-Calculator,Python,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2025-07-02,83,https://github.com/akashaero/Intrinsic-Value-Calculator,A Python tool for quick calculations of a stock's fair value using Discounted Cash Flow analysis.,True,False,False,False,akashaero/Intrinsic-Value-Calculator +Kelly-Criterion,Python,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2019-02-16,110,https://github.com/deltaray-io/kelly-criterion,Kelly Criterion implemented in Python to size portfolios based on J. L. Kelly Jr's formula.,True,False,False,False,deltaray-io/kelly-criterion +rateslib,Python,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2026-02-15,327,https://github.com/attack68/rateslib,"A fixed income library for pricing bonds and bond futures, and derivatives such as IRS, cross-currency and FX swaps.",True,False,False,False,attack68/rateslib +fypy,Python,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2025-02-27,139,https://github.com/jkirkby3/fypy,"Vanilla and exotic option pricing library to support quantitative R&D. Focus on pricing interesting/useful models and contracts (including and beyond Black-Scholes), as well as calibration of financial models to market data.",True,False,False,False,jkirkby3/fypy +optionlab,Python,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2025-12-25,487,https://github.com/rgaveiga/optionlab,A Python library for evaluating option trading strategies.,True,False,False,False,rgaveiga/optionlab +pandas_talib,Python,Indicators,Indicators,indicators,2018-05-30,781,https://github.com/femtotrader/pandas_talib,A Python Pandas implementation of technical analysis indicators.,True,False,False,False,femtotrader/pandas_talib +finta,Python,Indicators,Indicators,indicators,2022-07-24,2246,https://github.com/peerchemist/finta,Common financial technical analysis indicators implemented in Pandas.,True,False,False,False,peerchemist/finta +Tulipy,Python,Indicators,Indicators,indicators,2019-04-11,92,https://github.com/cirla/tulipy,Financial Technical Analysis Indicator Library (Python bindings for [tulipindicators](https://github.com/TulipCharts/tulipindicators)),True,False,False,False,cirla/tulipy +lppls,Python,Indicators,Indicators,indicators,2026-02-15,450,https://github.com/Boulder-Investment-Technologies/lppls,A Python module for fitting the [Log-Periodic Power Law Singularity (LPPLS)](https://en.wikipedia.org/wiki/Didier_Sornette#The_JLS_and_LPPLS_models) model.,True,False,False,False,Boulder-Investment-Technologies/lppls +talipp,Python,Indicators,Indicators,indicators,2025-09-09,526,https://github.com/nardew/talipp,Incremental technical analysis library for Python.,True,False,False,False,nardew/talipp +streaming_indicators,Python,Indicators,Indicators,indicators,2025-04-27,146,https://github.com/mr-easy/streaming_indicators,A python library for computing technical analysis indicators on streaming data.,True,False,False,False,mr-easy/streaming_indicators +the0,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-22,209,https://github.com/alexanderwanyoike/the0,"Self-hosted execution engine for algorithmic trading bots. Write strategies in Python, TypeScript, Rust, C++, C#, Scala, or Haskell and deploy with one command. Each bot runs in an isolated container with scheduled or streaming execution.",True,False,False,False,alexanderwanyoike/the0 +skfolio,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-14,1906,https://github.com/skfolio/skfolio,"Python library for portfolio optimization built on top of scikit-learn. It provides a unified interface and sklearn compatible tools to build, tune and cross-validate portfolio models.",True,False,False,False,skfolio/skfolio +Investing algorithm framework,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-20,701,https://github.com/coding-kitties/investing-algorithm-framework,"Framework for developing, backtesting, and deploying automated trading algorithms.",True,False,False,False,coding-kitties/investing-algorithm-framework +QSTrader,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2024-06-24,3327,https://github.com/mhallsmoore/qstrader,QSTrader backtesting simulation engine.,True,False,False,False,mhallsmoore/qstrader +Blankly,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2024-12-30,2417,https://github.com/Blankly-Finance/Blankly,"Fully integrated backtesting, paper trading, and live deployment.",True,False,False,False,Blankly-Finance/Blankly +TA-Lib,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-16,11803,https://github.com/mrjbq7/ta-lib,Python wrapper for TA-Lib ().,True,False,False,False,mrjbq7/ta-lib +zipline,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2020-10-14,19532,https://github.com/quantopian/zipline,Pythonic algorithmic trading library.,True,False,False,False,quantopian/zipline +zipline-reloaded,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2025-11-13,1687,https://github.com/stefan-jansen/zipline-reloaded,"Zipline, a Pythonic Algorithmic Trading Library.",True,False,False,False,stefan-jansen/zipline-reloaded +QuantSoftware Toolkit,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2016-10-07,476,https://github.com/QuantSoftware/QuantSoftwareToolkit,Python-based open source software framework designed to support portfolio construction and management.,True,False,False,False,QuantSoftware/QuantSoftwareToolkit +quantitative,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2019-03-03,66,https://github.com/jeffrey-liang/quantitative,"Quantitative finance, and backtesting library.",True,False,False,False,jeffrey-liang/quantitative +analyzer,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2015-12-22,214,https://github.com/llazzaro/analyzer,Python framework for real-time financial and backtesting trading strategies.,True,False,False,False,llazzaro/analyzer +bt,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-21,2830,https://github.com/pmorissette/bt,Flexible Backtesting for Python.,True,False,False,False,pmorissette/bt +backtrader,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2023-04-19,20874,https://github.com/backtrader/backtrader,Python Backtesting library for trading strategies.,True,False,False,False,backtrader/backtrader +pythalesians,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2016-09-23,63,https://github.com/thalesians/pythalesians,"Python library to backtest trading strategies, plot charts, seamlessly download market data, analyze market patterns etc.",True,False,False,False,thalesians/pythalesians +pybacktest,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2019-09-09,817,https://github.com/ematvey/pybacktest,"Vectorized backtesting framework in Python / pandas, designed to make your backtesting easier.",True,False,False,False,ematvey/pybacktest +pyalgotrade,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2023-03-05,4643,https://github.com/gbeced/pyalgotrade,Python Algorithmic Trading Library.,True,False,False,False,gbeced/pyalgotrade +basana,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2025-12-29,820,https://github.com/gbeced/basana,"A Python async and event driven framework for algorithmic trading, with a focus on crypto currencies.",True,False,False,False,gbeced/basana +ta,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-18,4915,https://github.com/bukosabino/ta,Technical Analysis Library using Pandas (Python),True,False,False,False,bukosabino/ta +algobroker,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2016-03-31,97,https://github.com/joequant/algobroker,This is an execution engine for algo trading.,True,False,False,False,joequant/algobroker +finmarketpy,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2025-03-10,3727,https://github.com/cuemacro/finmarketpy,Python library for backtesting trading strategies and analyzing financial markets.,True,False,False,False,cuemacro/finmarketpy +binary-martingale,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2017-10-16,48,https://github.com/metaperl/binary-martingale,Computer program to automatically trade binary options martingale style.,True,False,False,False,metaperl/binary-martingale +fooltrader,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2020-07-19,1182,https://github.com/foolcage/fooltrader,the project using big-data technology to provide an uniform way to analyze the whole market.,True,False,False,False,foolcage/fooltrader +zvt,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-01,4033,https://github.com/zvtvz/zvt,"the project using sql, pandas to provide an uniform and extendable way to record data, computing factors, select securities, backtesting, realtime trading and it could show all of them in clearly charts in realtime.",True,False,False,False,zvtvz/zvt +pylivetrader,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2022-04-11,681,https://github.com/alpacahq/pylivetrader,zipline-compatible live trading library.,True,False,False,False,alpacahq/pylivetrader +pipeline-live,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2022-04-11,206,https://github.com/alpacahq/pipeline-live,zipline's pipeline capability with IEX for live trading.,True,False,False,False,alpacahq/pipeline-live +zipline-extensions,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2018-09-17,18,https://github.com/quantrocket-llc/zipline-extensions,Zipline extensions and adapters for QuantRocket.,True,False,False,False,quantrocket-llc/zipline-extensions +moonshot,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2024-08-14,256,https://github.com/quantrocket-llc/moonshot,Vectorized backtester and trading engine for QuantRocket based on Pandas.,True,False,False,False,quantrocket-llc/moonshot +PyPortfolioOpt,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-10,5569,https://github.com/robertmartin8/PyPortfolioOpt,"Financial portfolio optimization in python, including classical efficient frontier and advanced methods.",True,False,False,False,robertmartin8/PyPortfolioOpt +Eiten,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2020-09-21,3165,https://github.com/tradytics/eiten,"Eiten is an open source toolkit by Tradytics that implements various statistical and algorithmic investing strategies such as Eigen Portfolios, Minimum Variance Portfolios, Maximum Sharpe Ratio Portfolios, and Genetic Algorithms based Portfolios.",True,False,False,False,tradytics/eiten +riskparity.py,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2024-05-27,318,https://github.com/dppalomar/riskparity.py,fast and scalable design of risk parity portfolios with TensorFlow 2.0,True,False,False,False,dppalomar/riskparity.py +mlfinlab,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2021-12-01,4618,https://github.com/hudson-and-thames/mlfinlab,"Implementations regarding ""Advances in Financial Machine Learning"" by Marcos Lopez de Prado. (Feature Engineering, Financial Data Structures, Meta-Labeling)",True,False,False,False,hudson-and-thames/mlfinlab +pyqstrat,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2023-11-05,371,https://github.com/abbass2/pyqstrat,"A fast, extensible, transparent python library for backtesting quantitative strategies.",True,False,False,False,abbass2/pyqstrat +NowTrade,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2017-02-07,101,https://github.com/edouardpoitras/NowTrade,Python library for backtesting technical/mechanical strategies in the stock and currency markets.,True,False,False,False,edouardpoitras/NowTrade +pinkfish,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2025-05-12,293,https://github.com/fja05680/pinkfish,A backtester and spreadsheet library for security analysis.,True,False,False,False,fja05680/pinkfish +PRISM-INSIGHT,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-20,505,https://github.com/dragon1086/prism-insight,"AI-powered stock analysis system with 13 specialized agents, automated trading via KIS API, supporting Korean & US markets.",True,False,False,False,dragon1086/prism-insight +FinClaw,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-22,15,https://github.com/NeuZhou/finclaw,"AI-powered financial intelligence engine with 8 master strategies across US, CN, and HK markets. Multi-agent architecture with +29.1% annual alpha. 227 tests.",True,False,False,False,NeuZhou/finclaw +aat,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-02,780,https://github.com/timkpaine/aat,Async Algorithmic Trading Engine,True,False,False,False,timkpaine/aat +Backtesting.py,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,,0,https://kernc.github.io/backtesting.py/,Backtest trading strategies in Python,False,False,False,False, +catalyst,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2021-09-22,2556,https://github.com/enigmampc/catalyst,An Algorithmic Trading Library for Crypto-Assets in Python,True,False,False,False,enigmampc/catalyst +quantstats,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-01-13,6871,https://github.com/ranaroussi/quantstats,"Portfolio analytics for quants, written in Python",True,False,False,False,ranaroussi/quantstats +qtpylib,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2021-03-24,2256,https://github.com/ranaroussi/qtpylib,"QTPyLib, Pythonic Algorithmic Trading ",True,False,False,False,ranaroussi/qtpylib +Quantdom,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2019-03-12,761,https://github.com/constverum/Quantdom,Python-based framework for backtesting trading strategies & analyzing financial markets [GUI :neckbeard:],True,False,False,False,constverum/Quantdom +freqtrade,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-22,47912,https://github.com/freqtrade/freqtrade,"Free, open source crypto trading bot",True,False,False,False,freqtrade/freqtrade +algorithmic-trading-with-python,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2021-06-01,3264,https://github.com/chrisconlan/algorithmic-trading-with-python,"Free `pandas` and `scikit-learn` resources for trading simulation, backtesting, and machine learning on financial data.",True,False,False,False,chrisconlan/algorithmic-trading-with-python +DeepDow,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2024-01-24,1117,https://github.com/jankrepl/deepdow,Portfolio optimization with deep learning,True,False,False,False,jankrepl/deepdow +Qlib,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-10,39183,https://github.com/microsoft/qlib,"An AI-oriented Quantitative Investment Platform by Microsoft. Full ML pipeline of data processing, model training, back-testing; and covers the entire chain of quantitative investment: alpha seeking, risk modeling, portfolio optimization, and order execution.",True,False,False,False,microsoft/qlib +machine-learning-for-trading,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2023-03-05,16803,https://github.com/stefan-jansen/machine-learning-for-trading,Code and resources for Machine Learning for Algorithmic Trading,True,False,False,False,stefan-jansen/machine-learning-for-trading +AlphaPy,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2025-08-24,1703,https://github.com/ScottfreeLLC/AlphaPy,"Automated Machine Learning [AutoML] with Python, scikit-learn, Keras, XGBoost, LightGBM, and CatBoost",True,False,False,False,ScottfreeLLC/AlphaPy +jesse,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-21,7569,https://github.com/jesse-ai/jesse,An advanced crypto trading bot written in Python,True,False,False,False,jesse-ai/jesse +rqalpha,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-11,6245,https://github.com/ricequant/rqalpha,"A extendable, replaceable Python algorithmic backtest && trading framework supporting multiple securities.",True,False,False,False,ricequant/rqalpha +FinRL-Library,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-21,14252,https://github.com/AI4Finance-LLC/FinRL-Library,A Deep Reinforcement Learning Library for Automated Trading in Quantitative Finance. NeurIPS 2020.,True,False,False,False,AI4Finance-LLC/FinRL-Library +bulbea,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2017-03-19,2264,https://github.com/achillesrasquinha/bulbea,Deep Learning based Python Library for Stock Market Prediction and Modelling.,True,False,False,False,achillesrasquinha/bulbea +ib_nope,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2021-04-22,33,https://github.com/ajhpark/ib_nope,Automated trading system for NOPE strategy over IBKR TWS.,True,False,False,False,ajhpark/ib_nope +OctoBot,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-17,5499,https://github.com/Drakkar-Software/OctoBot,"Open source cryptocurrency trading bot for high frequency, arbitrage, TA and social trading with an advanced web interface.",True,False,False,False,Drakkar-Software/OctoBot +OpenFinClaw,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-22,120,https://github.com/cryptoSUN2049/openFinclaw,"AI-native hedge fund platform: natural language strategy generation, Rust backtesting engine, multi-market execution, and self-evolving strategy pipeline with community leaderboard.",True,False,False,False,cryptoSUN2049/openFinclaw +bta-lib,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2020-03-11,492,https://github.com/mementum/bta-lib,Technical Analysis library in pandas for backtesting algotrading and quantitative analysis.,True,False,False,False,mementum/bta-lib +Stock-Prediction-Models,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2021-01-05,9263,https://github.com/huseinzol05/Stock-Prediction-Models,Gathers machine learning and deep learning models for Stock forecasting including trading bots and simulations.,True,False,False,False,huseinzol05/Stock-Prediction-Models +TuneTA,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2023-10-13,457,https://github.com/jmrichardson/tuneta,TuneTA optimizes technical indicators using a distance correlation measure to a user defined target feature such as next day return.,True,False,False,False,jmrichardson/tuneta +AutoTrader,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2025-05-04,1236,https://github.com/kieran-mackle/AutoTrader,A Python-based development platform for automated trading systems - from backtesting to optimization to livetrading.,True,False,False,False,kieran-mackle/AutoTrader +fast-trade,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-11,532,https://github.com/jrmeier/fast-trade,A library built with backtest portability and performance in mind for backtest trading strategies.,True,False,False,False,jrmeier/fast-trade +qf-lib,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-05,902,https://github.com/quarkfin/qf-lib,QF-Lib is a Python library that provides high quality tools for quantitative finance.,True,False,False,False,quarkfin/qf-lib +tda-api,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2024-06-16,1313,https://github.com/alexgolec/tda-api,"Gather data and trade equities, options, and ETFs via TDAmeritrade.",True,False,False,False,alexgolec/tda-api +vectorbt,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-19,6948,https://github.com/polakowo/vectorbt,"Find your trading edge, using a powerful toolkit for backtesting, algorithmic trading, and research.",True,False,False,False,polakowo/vectorbt +Lean,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-14,18004,https://github.com/QuantConnect/Lean,"Lean Algorithmic Trading Engine by QuantConnect (Python, C#).",True,False,False,False,QuantConnect/Lean +fast-trade,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-11,532,https://github.com/jrmeier/fast-trade,Low code backtesting library utilizing pandas and technical analysis indicators.,True,False,False,False,jrmeier/fast-trade +pysystemtrade,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-19,3233,https://github.com/robcarver17/pysystemtrade,"pysystemtrade is the open source version of Robert Carver's backtesting and trading engine that implements systems according to the framework outlined in his book ""Systematic Trading"", which is further developed on his [blog](https://qoppac.blogspot.com/).",True,False,False,False,robcarver17/pysystemtrade +pytrendseries,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-21,163,https://github.com/rafa-rod/pytrendseries,"Detect trend in time series, drawdown, drawdown within a constant look-back window , maximum drawdown, time underwater.",True,False,False,False,rafa-rod/pytrendseries +PyLOB,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2023-01-01,199,https://github.com/DrAshBooth/PyLOB,Fully functioning fast Limit Order Book written in Python.,True,False,False,False,DrAshBooth/PyLOB +PyBroker,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-05,3240,https://github.com/edtechre/pybroker,Algorithmic Trading with Machine Learning.,True,False,False,False,edtechre/pybroker +OctoBot Script,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-04,39,https://github.com/Drakkar-Software/OctoBot-Script,A quant framework to create cryptocurrencies strategies - from backtesting to optimization to livetrading.,True,False,False,False,Drakkar-Software/OctoBot-Script +hftbacktest,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2025-12-23,3837,https://github.com/nkaz001/hftbacktest,"A high-frequency trading and market-making backtesting tool accounts for limit orders, queue positions, and latencies, utilizing full tick data for trades and order books.",True,False,False,False,nkaz001/hftbacktest +vnpy,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-01-14,38182,https://github.com/vnpy/vnpy,VeighNa is a Python-based open source quantitative trading system development framework.,True,False,False,False,vnpy/vnpy +Intelligent Trading Bot,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-02-28,1642,https://github.com/asavinov/intelligent-trading-bot,Automatically generating signals and trading based on machine learning and feature engineering,True,False,False,False,asavinov/intelligent-trading-bot +fastquant,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2023-09-15,1746,https://github.com/enzoampil/fastquant,fastquant allows you to easily backtest investment strategies with as few as 3 lines of python code.,True,False,False,False,enzoampil/fastquant +nautilus_trader,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-22,21350,https://github.com/nautechsystems/nautilus_trader,A high-performance algorithmic trading platform and event-driven backtester.,True,False,False,False,nautechsystems/nautilus_trader +YABTE,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2024-05-11,6,https://github.com/bsdz/yabte,Yet Another (Python) BackTesting Engine.,True,False,False,False,bsdz/yabte +Trading Strategy,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-21,207,https://github.com/tradingstrategy-ai/getting-started,"TradingStrategy.ai is a market data, backtesting, live trading and investor management framework for decentralised finance",True,False,False,False,tradingstrategy-ai/getting-started +Hikyuu,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-22,3053,https://github.com/fasiondog/hikyuu,"A base on Python/C++ open source high-performance quant framework for faster analysis and backtesting, contains the complete trading system components for reuse and combination.",True,False,False,False,fasiondog/hikyuu +rust_bt,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-01-05,58,https://github.com/jensnesten/rust_bt,"A high performance, low-latency backtesting engine for testing quantitative trading strategies on historical and live data in Rust.",True,False,False,False,jensnesten/rust_bt +Gunbot Quant,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2025-08-19,42,https://github.com/GuntharDeNiro/gunbot-quant,"Toolkit for quantitative trading analysis. It integrates an advanced market screener, a multi-strategy, multi-asset backtesting engine. Use with built-in GUI or through CLI.",True,False,False,False,GuntharDeNiro/gunbot-quant +StrateQueue,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2025-12-30,170,https://github.com/StrateQueue/StrateQueue,"An open‑source, broker‑agnostic Python library that lets you seamlessly deploy strategies from any major backtesting engine to live (or paper) trading with zero code changes and built‑in safety controls.",True,False,False,False,StrateQueue/StrateQueue +PythonTradingFramework,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-22,27,https://github.com/JustinGuese/python_tradingbot_framework,"Python algorithmic trading bot framework for Kubernetes: backtesting, hyperparameter optimization, 150+ technical analysis indicators (RSI, MACD, Bollinger Bands, ADX), portfolio management, PostgreSQL integration, Helm deployment, CronJob scheduling. Minimal overhead, production-ready, Yahoo Finance data.",True,False,False,False,JustinGuese/python_tradingbot_framework +QTradeX-AI-Agents,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2025-05-25,16,https://github.com/squidKid-deluxe/QTradeX-AI-Agents,Example strategies for the QTradeX platfrom.,True,False,False,False,squidKid-deluxe/QTradeX-AI-Agents +QTradeX-Algo-Trading-SDK,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-01-13,60,https://github.com/squidKid-deluxe/QTradeX-Algo-Trading-SDK,"AI-powered SDK featuring algorithmic trading, backtesting, deployment on 100+ exchanges, and multiple optimization engines.",True,False,False,False,squidKid-deluxe/QTradeX-Algo-Trading-SDK +antback,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2025-11-12,15,https://github.com/ts-kontakt/antback,"A lightweight, event-loop-style backtest engine that allows a function-driven imperative style using efficient stateful helper functions and data containers.",True,False,False,False,ts-kontakt/antback +VARRD,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-09,10,https://github.com/augiemazza/varrd,"AI-powered trading edge discovery platform that validates trading ideas with event studies, statistical tests, and real market data. Web app, MCP server, CLI (`pip install varrd`), and Python SDK.",True,False,False,False,augiemazza/varrd +polymarket-whales,Python,Trading & Backtesting,Trading & Backtesting,trading-backtesting,2026-03-20,28,https://github.com/al1enjesus/polymarket-whales,Real-time whale trade tracker for Polymarket — terminal alerts + Telegram notifications when large orders hit the book.,True,False,False,False,al1enjesus/polymarket-whales +QuantLibRisks,Python,Risk Analysis,Risk Analysis,risk-analysis,2024-04-04,19,https://github.com/auto-differentiation/QuantLib-Risks-Py,Fast risks with QuantLib,True,False,False,False,auto-differentiation/QuantLib-Risks-Py +XAD,Python,Risk Analysis,Risk Analysis,risk-analysis,2024-05-21,19,https://github.com/auto-differentiation/xad-py,Automatic Differentation (AAD) Library,True,False,False,False,auto-differentiation/xad-py +pyfolio,Python,Risk Analysis,Risk Analysis,risk-analysis,2020-02-28,6265,https://github.com/quantopian/pyfolio,Portfolio and risk analytics in Python.,True,False,False,False,quantopian/pyfolio +empyrical,Python,Risk Analysis,Risk Analysis,risk-analysis,2020-10-14,1474,https://github.com/quantopian/empyrical,Common financial risk and performance metrics.,True,False,False,False,quantopian/empyrical +fecon235,Python,Risk Analysis,Risk Analysis,risk-analysis,2018-12-03,1255,https://github.com/rsvp/fecon235,"Computational tools for financial economics include: Gaussian Mixture model of leptokurtotic risk, adaptive Boltzmann portfolios.",True,False,False,False,rsvp/fecon235 +finance,Python,Risk Analysis,Risk Analysis,risk-analysis,2014-03-24,0,https://pypi.org/project/finance/,Financial Risk Calculations. Optimized for ease of use through class construction and operator overload.,False,False,True,False, +qfrm,Python,Risk Analysis,Risk Analysis,risk-analysis,2015-12-12,0,https://pypi.org/project/qfrm/,"Quantitative Financial Risk Management: awesome OOP tools for measuring, managing and visualizing risk of financial instruments and portfolios. (Last updated: 2015-12-12)",False,False,True,False, +visualize-wealth,Python,Risk Analysis,Risk Analysis,risk-analysis,2015-06-10,146,https://github.com/benjaminmgross/visualize-wealth,Portfolio construction and quantitative analysis.,True,False,False,False,benjaminmgross/visualize-wealth +VisualPortfolio,Python,Risk Analysis,Risk Analysis,risk-analysis,2017-02-28,107,https://github.com/wegamekinglc/VisualPortfolio,This tool is used to visualize the performance of a portfolio.,True,False,False,False,wegamekinglc/VisualPortfolio +universal-portfolios,Python,Risk Analysis,Risk Analysis,risk-analysis,2025-09-11,852,https://github.com/Marigold/universal-portfolios,Collection of algorithms for online portfolio selection.,True,False,False,False,Marigold/universal-portfolios +FinQuant,Python,Risk Analysis,Risk Analysis,risk-analysis,2023-09-03,1731,https://github.com/fmilthaler/FinQuant,"A program for financial portfolio management, analysis and optimization.",True,False,False,False,fmilthaler/FinQuant +Empyrial,Python,Risk Analysis,Risk Analysis,risk-analysis,2025-09-14,1053,https://github.com/ssantoshp/Empyrial,Portfolio's risk and performance analytics and returns predictions.,True,False,False,False,ssantoshp/Empyrial +risktools,Python,Risk Analysis,Risk Analysis,risk-analysis,2024-12-07,38,https://github.com/bbcho/risktools-dev,Risk tools for use within the crude and crude products trading space with partial implementation of R's PerformanceAnalytics.,True,False,False,False,bbcho/risktools-dev +Riskfolio-Lib,Python,Risk Analysis,Risk Analysis,risk-analysis,2026-03-08,3825,https://github.com/dcajasn/Riskfolio-Lib,Portfolio Optimization and Quantitative Strategic Asset Allocation in Python.,True,False,False,False,dcajasn/Riskfolio-Lib +empyrical-reloaded,Python,Risk Analysis,Risk Analysis,risk-analysis,2025-07-29,101,https://github.com/stefan-jansen/empyrical-reloaded,Common financial risk and performance metrics. [empyrical](https://github.com/quantopian/empyrical) fork.,True,False,False,False,stefan-jansen/empyrical-reloaded +pyfolio-reloaded,Python,Risk Analysis,Risk Analysis,risk-analysis,2025-06-02,579,https://github.com/stefan-jansen/pyfolio-reloaded,Portfolio and risk analytics in Python. [pyfolio](https://github.com/quantopian/pyfolio) fork.,True,False,False,False,stefan-jansen/pyfolio-reloaded +fortitudo.tech,Python,Risk Analysis,Risk Analysis,risk-analysis,2026-02-19,289,https://github.com/fortitudo-tech/fortitudo.tech,Conditional Value-at-Risk (CVaR) portfolio optimization and Entropy Pooling views / stress-testing in Python.,True,False,False,False,fortitudo-tech/fortitudo.tech +quantitative-finance-tools,Python,Risk Analysis,Risk Analysis,risk-analysis,2025-12-13,4,https://github.com/omichauhan-lgtm/quantitative-finance-tools,Library for portfolio optimization (MVO) and rigorous risk metrics (VaR/CVaR).,True,False,False,False,omichauhan-lgtm/quantitative-finance-tools +curistat,Python,Risk Analysis,Risk Analysis,risk-analysis,,0,https://github.com/moxiespirit/MyClone/tree/main/volatility_platform,"Futures volatility forecasting platform for ES/NQ. Proprietary CVN rating (1-10), regime detection (CRC composite), 8 directional signals, economic event impact analytics. Includes MCP server for AI agent integration.",True,False,False,False, +Prop Trader Compass,Python,Risk Analysis,Risk Analysis,risk-analysis,,0,https://otto-ships.github.io/prop-trader-compass/,Interactive risk and payout calculator for Futures and CFD traders; features one-time fee firm comparisons.,False,False,False,False, +alphalens,Python,Factor Analysis,Factor Analysis,factor-analysis,2020-04-27,4188,https://github.com/quantopian/alphalens,Performance analysis of predictive alpha factors.,True,False,False,False,quantopian/alphalens +alphalens-reloaded,Python,Factor Analysis,Factor Analysis,factor-analysis,2025-06-02,557,https://github.com/stefan-jansen/alphalens-reloaded,Performance analysis of predictive (alpha) stock factors.,True,False,False,False,stefan-jansen/alphalens-reloaded +Spectre,Python,Factor Analysis,Factor Analysis,factor-analysis,2025-04-15,784,https://github.com/Heerozh/spectre,GPU-accelerated Factors analysis library and Backtester,True,False,False,False,Heerozh/spectre +quant-lab-alpha,Python,Factor Analysis,Factor Analysis,factor-analysis,2026-03-15,27,https://github.com/husainm97/quant-lab-alpha,Open-source investment analytics platform bridging academic research and retail finance.,True,False,False,False,husainm97/quant-lab-alpha +Asset News Sentiment Analyzer,Python,Sentiment Analysis,Sentiment Analysis,sentiment-analysis,2024-07-27,193,https://github.com/KVignesh122/AssetNewsSentimentAnalyzer,Sentiment analysis and report generation package for financial assets and securities utilizing GPT models.,True,False,False,False,KVignesh122/AssetNewsSentimentAnalyzer +Social Stock Sentiment API,Python,Sentiment Analysis,Sentiment Analysis,sentiment-analysis,,0,https://api.adanos.org/docs,"REST API analyzing Reddit and X/Twitter for stock mentions and sentiment, providing buzz scores, trending stocks, and AI-generated trend explanations.",False,False,False,False, +Jupyter Quant,Python,Quant Research Environment,Quant Research Environment,quant-research-environment,2024-06-14,19,https://github.com/gnzsnz/jupyter-quant,"A dockerized Jupyter quant research environment with preloaded tools for quant analysis, statsmodels, pymc, arch, py_vollib, zipline-reloaded, PyPortfolioOpt, etc.",True,False,False,False,gnzsnz/jupyter-quant +ARCH,Python,Time Series,Time Series,time-series,2026-03-09,1496,https://github.com/bashtage/arch,ARCH models in Python.,True,False,False,False,bashtage/arch +statsmodels,Python,Time Series,Time Series,time-series,2026-03-19,11311,http://statsmodels.sourceforge.net,"Python module that allows users to explore data, estimate statistical models, and perform statistical tests. [GitHub](https://github.com/statsmodels/statsmodels)",True,False,False,False,statsmodels/statsmodels +dynts,Python,Time Series,Time Series,time-series,2016-11-02,87,https://github.com/quantmind/dynts,Python package for timeseries analysis and manipulation.,True,False,False,False,quantmind/dynts +PyFlux,Python,Time Series,Time Series,time-series,2018-12-16,2141,https://github.com/RJT1990/pyflux,Python library for timeseries modelling and inference (frequentist and Bayesian) on models.,True,False,False,False,RJT1990/pyflux +tsfresh,Python,Time Series,Time Series,time-series,2025-11-15,9154,https://github.com/blue-yonder/tsfresh,Automatic extraction of relevant features from time series.,True,False,False,False,blue-yonder/tsfresh +Facebook Prophet,Python,Time Series,Time Series,time-series,2026-02-02,20087,https://github.com/facebook/prophet,Tool for producing high quality forecasts for time series data that has multiple seasonality with linear or non-linear growth.,True,False,False,False,facebook/prophet +tsmoothie,Python,Time Series,Time Series,time-series,2023-11-23,769,https://github.com/cerlymarco/tsmoothie,A python library for time-series smoothing and outlier detection in a vectorized way.,True,False,False,False,cerlymarco/tsmoothie +pmdarima,Python,Time Series,Time Series,time-series,2025-11-17,1717,https://github.com/alkaline-ml/pmdarima,"A statistical library designed to fill the void in Python's time series analysis capabilities, including the equivalent of R's auto.arima function.",True,False,False,False,alkaline-ml/pmdarima +gluon-ts,Python,Time Series,Time Series,time-series,2026-03-17,5146,https://github.com/awslabs/gluon-ts,vProbabilistic time series modeling in Python.,True,False,False,False,awslabs/gluon-ts +functime,Python,Time Series,Time Series,time-series,2024-06-15,1168,https://github.com/functime-org/functime,Time-series machine learning at scale. Built with Polars for embarrassingly parallel feature extraction and forecasts on panel data.,True,False,False,False,functime-org/functime +exchange_calendars,Python,Calendars,Calendars,calendars,2026-01-19,607,https://github.com/gerrymanoim/exchange_calendars,Stock Exchange Trading Calendars.,True,False,False,False,gerrymanoim/exchange_calendars +bizdays,Python,Calendars,Calendars,calendars,2026-03-08,89,https://github.com/wilsonfreitas/python-bizdays,Business days calculations and utilities.,True,False,False,False,wilsonfreitas/python-bizdays +pandas_market_calendars,Python,Calendars,Calendars,calendars,2026-03-12,958,https://github.com/rsheftel/pandas_market_calendars,Exchange calendars to use with pandas for trading applications.,True,False,False,False,rsheftel/pandas_market_calendars +Polymarket Scanner API,Python,Data Sources,Data Sources,data-sources,2026-03-14,1,https://github.com/vesper-astrena/polymarket-scanner-api,"Real-time arbitrage detection API for Polymarket prediction markets, scanning 12,000+ markets for mispricings.",True,False,False,False,vesper-astrena/polymarket-scanner-api +yfinance,Python,Data Sources,Data Sources,data-sources,2026-03-19,22268,https://github.com/ranaroussi/yfinance,Yahoo! Finance market data downloader (+faster Pandas Datareader),True,False,False,False,ranaroussi/yfinance +defeatbeta-api,Python,Data Sources,Data Sources,data-sources,2026-03-19,519,https://github.com/defeat-beta/defeatbeta-api,An open-source alternative to Yahoo Finance's market data APIs with higher reliability.,True,False,False,False,defeat-beta/defeatbeta-api +findatapy,Python,Data Sources,Data Sources,data-sources,2026-03-20,2008,https://github.com/cuemacro/findatapy,"Python library to download market data via Bloomberg, Quandl, Yahoo etc.",True,False,False,False,cuemacro/findatapy +googlefinance,Python,Data Sources,Data Sources,data-sources,2018-09-23,818,https://github.com/hongtaocai/googlefinance,Python module to get real-time stock data from Google Finance API.,True,False,False,False,hongtaocai/googlefinance +yahoo-finance,Python,Data Sources,Data Sources,data-sources,2021-12-15,1430,https://github.com/lukaszbanasiak/yahoo-finance,Python module to get stock data from Yahoo! Finance.,True,False,False,False,lukaszbanasiak/yahoo-finance +pandas-datareader,Python,Data Sources,Data Sources,data-sources,2025-04-03,3169,https://github.com/pydata/pandas-datareader,"Python module to get data from various sources (Google Finance, Yahoo Finance, FRED, OECD, Fama/French, World Bank, Eurostat...) into Pandas datastructures such as DataFrame, Panel with a caching mechanism.",True,False,False,False,pydata/pandas-datareader +pandas-finance,Python,Data Sources,Data Sources,data-sources,2025-03-07,160,https://github.com/davidastephens/pandas-finance,High level API for access to and analysis of financial data.,True,False,False,False,davidastephens/pandas-finance +pyhoofinance,Python,Data Sources,Data Sources,data-sources,2016-10-07,9,https://github.com/innes213/pyhoofinance,Rapidly queries Yahoo Finance for multiple tickers and returns typed data for analysis.,True,False,False,False,innes213/pyhoofinance +yfinanceapi,Python,Data Sources,Data Sources,data-sources,2020-05-26,9,https://github.com/Karthik005/yfinanceapi,Finance API for Python.,True,False,False,False,Karthik005/yfinanceapi +yql-finance,Python,Data Sources,Data Sources,data-sources,2015-08-29,16,https://github.com/slawek87/yql-finance,"yql-finance is simple and fast. API returns stock closing prices for current period of time and current stock ticker (i.e. APPL, GOOGL).",True,False,False,False,slawek87/yql-finance +ystockquote,Python,Data Sources,Data Sources,data-sources,2017-03-10,537,https://github.com/cgoldberg/ystockquote,Retrieve stock quote data from Yahoo Finance.,True,False,False,False,cgoldberg/ystockquote +wallstreet,Python,Data Sources,Data Sources,data-sources,2024-03-09,1625,https://github.com/mcdallas/wallstreet,Real time stock and option data.,True,False,False,False,mcdallas/wallstreet +stock_extractor,Python,Data Sources,Data Sources,data-sources,2016-09-10,51,https://github.com/ZachLiuGIS/stock_extractor,General Purpose Stock Extractors from Online Resources.,True,False,False,False,ZachLiuGIS/stock_extractor +Stockex,Python,Data Sources,Data Sources,data-sources,2021-09-15,33,https://github.com/cttn/Stockex,Python wrapper for Yahoo! Finance API.,True,False,False,False,cttn/Stockex +SwapAPI,Python,Data Sources,Data Sources,data-sources,2026-03-17,0,https://swapapi.dev,Free DEX aggregator API returning executable swap calldata across 46 EVM chains. No API key required. [GitHub](https://github.com/swap-api/swap-api),True,False,False,False,swap-api/swap-api +finsymbols,Python,Data Sources,Data Sources,data-sources,2017-07-23,123,https://github.com/skillachie/finsymbols,"Obtains stock symbols and relating information for SP500, AMEX, NYSE, and NASDAQ.",True,False,False,False,skillachie/finsymbols +FRB,Python,Data Sources,Data Sources,data-sources,2018-12-22,180,https://github.com/avelkoski/FRB,Python Client for FRED® API.,True,False,False,False,avelkoski/FRB +inquisitor,Python,Data Sources,Data Sources,data-sources,2019-10-10,56,https://github.com/econdb/inquisitor,Python Interface to Econdb.com API.,True,False,False,False,econdb/inquisitor +yfi,Python,Data Sources,Data Sources,data-sources,2016-02-12,2,https://github.com/nickelkr/yfi,Yahoo! YQL library.,True,False,False,False,nickelkr/yfi +chinesestockapi,Python,Data Sources,Data Sources,data-sources,2015-03-21,0,https://pypi.org/project/chinesestockapi/,Python API to get Chinese stock price. (Last updated: 2015-03-21),False,False,True,False, +exchange,Python,Data Sources,Data Sources,data-sources,2015-07-07,18,https://github.com/akarat/exchange,Get current exchange rate.,True,False,False,False,akarat/exchange +ticks,Python,Data Sources,Data Sources,data-sources,2016-01-08,16,https://github.com/jamescnowell/ticks,Simple command line tool to get stock ticker data.,True,False,False,False,jamescnowell/ticks +pybbg,Python,Data Sources,Data Sources,data-sources,2015-01-20,53,https://github.com/bpsmith/pybbg,Python interface to Bloomberg COM APIs.,True,False,False,False,bpsmith/pybbg +ccy,Python,Data Sources,Data Sources,data-sources,2025-12-28,95,https://github.com/lsbardel/ccy,Python module for currencies.,True,False,False,False,lsbardel/ccy +tushare,Python,Data Sources,Data Sources,data-sources,2024-08-27,0,https://pypi.org/project/tushare/,A utility for crawling historical and Real-time Quotes data of China stocks. (Last updated: 2024-08-27),False,False,True,False, +edinet-mcp,Python,Data Sources,Data Sources,data-sources,2026-03-02,4,https://github.com/ajtgjmdjp/edinet-mcp,"Parse Japanese XBRL financial statements from EDINET with 161 normalized labels, 26 financial metrics, and multi-company screening.",True,False,False,False,ajtgjmdjp/edinet-mcp +estat-mcp,Python,Data Sources,Data Sources,data-sources,2026-03-02,0,https://github.com/ajtgjmdjp/estat-mcp,"Access Japanese government statistics (e-Stat) covering population, GDP, CPI, labor, and trade data with MCP integration and Polars export.",True,False,False,False,ajtgjmdjp/estat-mcp +tdnet-disclosure-mcp,Python,Data Sources,Data Sources,data-sources,2026-03-02,1,https://github.com/ajtgjmdjp/tdnet-disclosure-mcp,"Access Japanese timely disclosures (TDNet) via MCP. Retrieve earnings, dividends, forecasts, buybacks, and other filings for 4,000+ listed companies. No API key required.",True,False,False,False,ajtgjmdjp/tdnet-disclosure-mcp +cn_stock_src,Python,Data Sources,Data Sources,data-sources,2016-02-29,34,https://github.com/jealous/cn_stock_src,Utility for retrieving basic China stock data from different sources.,True,False,False,False,jealous/cn_stock_src +coinmarketcap,Python,Data Sources,Data Sources,data-sources,2023-05-23,435,https://github.com/barnumbirr/coinmarketcap,Python API for coinmarketcap.,True,False,False,False,barnumbirr/coinmarketcap +coinpulse,Python,Data Sources,Data Sources,data-sources,2026-01-09,1,https://github.com/soutone/coinpulse-python,"Python SDK for cryptocurrency portfolio tracking with real-time prices, P/L calculations, and price alerts. Free tier available.",True,False,False,False,soutone/coinpulse-python +after-hours,Python,Data Sources,Data Sources,data-sources,2020-06-22,38,https://github.com/datawrestler/after-hours,Obtain pre market and after hours stock prices for a given symbol.,True,False,False,False,datawrestler/after-hours +bronto-python,Python,Data Sources,Data Sources,data-sources,2015-02-27,0,https://pypi.org/project/bronto-python/,Bronto API Integration for Python. [GitHub](https://github.com/Scotts-Marketplace/bronto-python),True,False,True,False,Scotts-Marketplace/bronto-python +pytdx,Python,Data Sources,Data Sources,data-sources,2020-04-15,1506,https://github.com/rainx/pytdx,Python Interface for retrieving chinese stock realtime quote data from TongDaXin Nodes.,True,False,False,False,rainx/pytdx +pdblp,Python,Data Sources,Data Sources,data-sources,2024-12-14,255,https://github.com/matthewgilbert/pdblp,A simple interface to integrate pandas and the Bloomberg Open API.,True,False,False,False,matthewgilbert/pdblp +tiingo,Python,Data Sources,Data Sources,data-sources,2025-06-22,303,https://github.com/hydrosquall/tiingo-python,"Python interface for daily composite prices/OHLC/Volume + Real-time News Feeds, powered by the Tiingo Data Platform.",True,False,False,False,hydrosquall/tiingo-python +iexfinance,Python,Data Sources,Data Sources,data-sources,2021-01-02,650,https://github.com/addisonlynch/iexfinance,Python Interface for retrieving real-time and historical prices and equities data from The Investor's Exchange.,True,False,False,False,addisonlynch/iexfinance +pyEX,Python,Data Sources,Data Sources,data-sources,2024-02-05,409,https://github.com/timkpaine/pyEX,"Python interface to IEX with emphasis on pandas, support for streaming data, premium data, points data (economic, rates, commodities), and technical indicators.",True,False,False,False,timkpaine/pyEX +alpaca-trade-api,Python,Data Sources,Data Sources,data-sources,2024-01-12,1861,https://github.com/alpacahq/alpaca-trade-api-python,Python interface for retrieving real-time and historical prices from Alpaca API as well as trade execution.,True,False,False,False,alpacahq/alpaca-trade-api-python +metatrader5,Python,Data Sources,Data Sources,data-sources,2026-02-20,0,https://pypi.org/project/MetaTrader5/,API Connector to MetaTrader 5 Terminal. (Last updated: 2026-02-20),False,False,True,False, +akshare,Python,Data Sources,Data Sources,data-sources,2026-03-22,17582,https://github.com/jindaxiang/akshare,"AkShare is an elegant and simple financial data interface library for Python, built for human beings! ",True,False,False,False,jindaxiang/akshare +yahooquery,Python,Data Sources,Data Sources,data-sources,2025-05-15,900,https://github.com/dpguthrie/yahooquery,Python interface for retrieving data through unofficial Yahoo Finance API.,True,False,False,False,dpguthrie/yahooquery +investpy,Python,Data Sources,Data Sources,data-sources,2022-10-02,1811,https://github.com/alvarobartt/investpy,Financial Data Extraction from Investing.com with Python! ,True,False,False,False,alvarobartt/investpy +yliveticker,Python,Data Sources,Data Sources,data-sources,2021-04-29,163,https://github.com/yahoofinancelive/yliveticker,Live stream of market data from Yahoo Finance websocket.,True,False,False,False,yahoofinancelive/yliveticker +bbgbridge,Python,Data Sources,Data Sources,data-sources,2020-01-07,2,https://github.com/ran404/bbgbridge,Easy to use Bloomberg Desktop API wrapper for Python.,True,False,False,False,ran404/bbgbridge +polygon.io,Python,Data Sources,Data Sources,data-sources,2026-03-05,1361,https://github.com/polygon-io/client-python,A python library for Polygon.io financial data APIs.,True,False,False,False,polygon-io/client-python +alpha_vantage,Python,Data Sources,Data Sources,data-sources,2026-03-03,4743,https://github.com/RomelTorres/alpha_vantage,A python wrapper for Alpha Vantage API for financial data.,True,False,False,False,RomelTorres/alpha_vantage +oilpriceapi,Python,Data Sources,Data Sources,data-sources,2026-03-18,0,https://github.com/OilpriceAPI/python-sdk,"Python SDK for real-time oil and commodity prices (WTI, Brent, Urals, natural gas, coal) with OpenBB integration.",True,False,False,False,OilpriceAPI/python-sdk +FinanceDataReader,Python,Data Sources,Data Sources,data-sources,2026-03-11,1442,https://github.com/FinanceData/FinanceDataReader,"Open Source Financial data reader for U.S, Korean, Japanese, Chinese, Vietnamese Stocks",True,False,False,False,FinanceData/FinanceDataReader +pystlouisfed,Python,Data Sources,Data Sources,data-sources,2024-01-09,21,https://github.com/TomasKoutek/pystlouisfed,"Python client for Federal Reserve Bank of St. Louis API - FRED, ALFRED, GeoFRED and FRASER.",True,False,False,False,TomasKoutek/pystlouisfed +python-bcb,Python,Data Sources,Data Sources,data-sources,2026-02-27,109,https://github.com/wilsonfreitas/python-bcb,Python interface to Brazilian Central Bank web services.,True,False,False,False,wilsonfreitas/python-bcb +swiss-finance-data,Python,Data Sources,Data Sources,data-sources,2026-03-11,0,https://github.com/EMen11/swiss-finance-data,"Python package for Swiss financial data (SNB Policy Rate, SARON, CHF FX rates, CPI, SMI equities, Confederation bond yields) from official SNB sources.",True,False,False,False,EMen11/swiss-finance-data +market-prices,Python,Data Sources,Data Sources,data-sources,2026-02-05,95,https://github.com/maread99/market_prices,Create meaningful OHLCV datasets from knowledge of [exchange-calendars](https://github.com/gerrymanoim/exchange_calendars) (works out-the-box with data from Yahoo Finance).,True,False,False,False,maread99/market_prices +tardis-python,Python,Data Sources,Data Sources,data-sources,2026-02-26,140,https://github.com/tardis-dev/tardis-python,Python interface for Tardis.dev high frequency crypto market data,True,False,False,False,tardis-dev/tardis-python +lake-api,Python,Data Sources,Data Sources,data-sources,2025-11-02,63,https://github.com/crypto-lake/lake-api,Python interface for Crypto Lake high frequency crypto market data,True,False,False,False,crypto-lake/lake-api +tessa,Python,Data Sources,Data Sources,data-sources,2026-01-16,53,https://github.com/ymyke/tessa,"simple, hassle-free access to price information of financial assets (currently based on yfinance and pycoingecko), including search and a symbol class.",True,False,False,False,ymyke/tessa +pandaSDMX,Python,Data Sources,Data Sources,data-sources,2023-02-25,133,https://github.com/dr-leo/pandaSDMX,"Python package that implements SDMX 2.1 (ISO 17369:2013), a format for exchange of statistical data and metadata used by national statistical agencies, central banks, and international organisations.",True,False,False,False,dr-leo/pandaSDMX +cif,Python,Data Sources,Data Sources,data-sources,2022-06-18,64,https://github.com/LenkaV/CIF,"Python package that include few composite indicators, which summarize multidimensional relationships between individual economic indicators.",True,False,False,False,LenkaV/CIF +finagg,Python,Data Sources,Data Sources,data-sources,2026-03-22,525,https://github.com/theOGognf/finagg,"finagg is a Python package that provides implementations of popular and free financial APIs, tools for aggregating historical data from those APIs into SQL databases, and tools for transforming aggregated data into features useful for analysis and AI/ML.",True,False,False,False,theOGognf/finagg +FinanceDatabase,Python,Data Sources,Data Sources,data-sources,2026-03-22,7248,https://github.com/JerBouma/FinanceDatabase,"This is a database of 300.000+ symbols containing Equities, ETFs, Funds, Indices, Currencies, Cryptocurrencies and Money Markets.",True,False,False,False,JerBouma/FinanceDatabase +Trading Strategy,Python,Data Sources,Data Sources,data-sources,,0,https://github.com/tradingstrategy-ai/trading-strategy/,download price data for decentralised exchanges and lending protocols (DeFi),True,False,False,False, +datamule-python,Python,Data Sources,Data Sources,data-sources,2026-03-19,519,https://github.com/john-friedman/datamule-python,A package to work with SEC data. Incorporates datamule endpoints.,True,False,False,False,john-friedman/datamule-python +fsynth,Python,Data Sources,Data Sources,data-sources,2025-12-27,4,https://github.com/welcra/fsynth,Python library for high-fidelity unlimited synthetic financial data generation using Heston Stochastic Volatility and Merton Jump Diffusion.,True,False,False,False,welcra/fsynth +fedfred,Python,Data Sources,Data Sources,data-sources,,0,https://nikhilxsunder.github.io/fedfred/,"FRED & GeoFRED Economic data API with preprocessed dataframe output in pandas/geopandas, polars/polars_st, and dask dataframes/geodataframes.",False,False,False,False, +edgar-sec,Python,Data Sources,Data Sources,data-sources,,0,https://nikhilxsunder.github.io/edgar-sec/,EDGAR Financial data API with preprocessed dataclass outputs.,False,False,False,False, +edgartools,Python,Data Sources,Data Sources,data-sources,2026-03-20,1877,https://github.com/dgunning/edgartools,"AI-native SEC EDGAR library with XBRL financials, clean text extraction, 17+ typed forms, and pandas DataFrames.",True,False,False,False,dgunning/edgartools +FXMacroData,Python,Data Sources,Data Sources,data-sources,2026-01-17,3,https://fxmacrodata.com/,Real-time forex macroeconomic API for all major currency pairs sourced from central bank announcements. [GitHub](https://github.com/fxmacrodata/fxmacrodata),True,False,False,False,fxmacrodata/fxmacrodata +wallstreet,Python,Data Sources,Data Sources,data-sources,2024-03-09,1625,https://github.com/mcdallas/wallstreet,Real time stock and option data.,True,False,False,False,mcdallas/wallstreet +xlwings,Python,Excel Integration,Excel Integration,excel-integration,2026-03-22,3325,https://www.xlwings.org/,Make Excel fly with Python. [GitHub](https://github.com/xlwings/xlwings),True,False,False,False,xlwings/xlwings +openpyxl,Python,Excel Integration,Excel Integration,excel-integration,,0,https://openpyxl.readthedocs.io/en/latest/,Read/Write Excel 2007 xlsx/xlsm files.,False,False,False,False, +xlrd,Python,Excel Integration,Excel Integration,excel-integration,2025-06-14,2203,https://github.com/python-excel/xlrd,Library for developers to extract data from Microsoft Excel spreadsheet files.,True,False,False,False,python-excel/xlrd +xlsxwriter,Python,Excel Integration,Excel Integration,excel-integration,2026-03-22,3923,https://xlsxwriter.readthedocs.io/,Write files in the Excel 2007+ XLSX file format. [GitHub](https://github.com/jmcnamara/XlsxWriter),True,False,False,False,jmcnamara/XlsxWriter +xlwt,Python,Excel Integration,Excel Integration,excel-integration,2018-09-16,1046,https://github.com/python-excel/xlwt,"Library to create spreadsheet files compatible with MS Excel 97/2000/XP/2003 XLS files, on any platform.",True,False,False,False,python-excel/xlwt +xlloop,Python,Excel Integration,Excel Integration,excel-integration,2018-03-10,110,http://xlloop.sourceforge.net,XLLoop is an open source framework for implementing Excel user-defined functions (UDFs) on a centralised server (a function server). [GitHub](https://github.com/poidasmith/xlloop),True,False,False,False,poidasmith/xlloop +expy,Python,Excel Integration,Excel Integration,excel-integration,,0,http://www.bnikolic.co.uk/expy/expy.html,"The ExPy add-in allows easy use of Python directly from within an Microsoft Excel spreadsheet, both to execute arbitrary code and to define new Excel functions.",False,False,False,False, +pyxll,Python,Excel Integration,Excel Integration,excel-integration,,0,https://www.pyxll.com,PyXLL is an Excel add-in that enables you to extend Excel using nothing but Python code.,False,False,False,False, +D-Tale,Python,Visualization,Visualization,visualization,2026-03-03,5077,https://github.com/man-group/dtale,Visualizer for pandas dataframes and xarray datasets.,True,False,False,False,man-group/dtale +mplfinance,Python,Visualization,Visualization,visualization,2024-04-02,4323,https://github.com/matplotlib/mplfinance,"matplotlib utilities for the visualization, and visual analysis, of financial data.",True,False,False,False,matplotlib/mplfinance +finplot,Python,Visualization,Visualization,visualization,2026-02-27,1128,https://github.com/highfestiva/finplot,Performant and effortless finance plotting for Python.,True,False,False,False,highfestiva/finplot +finvizfinance,Python,Visualization,Visualization,visualization,2026-01-03,1273,https://github.com/lit26/finvizfinance,Finviz analysis python library.,True,False,False,False,lit26/finvizfinance +market-analy,Python,Visualization,Visualization,visualization,2026-03-05,75,https://github.com/maread99/market_analy,Analysis and interactive charting using [market-prices](https://github.com/maread99/market_prices) and bqplot.,True,False,False,False,maread99/market_analy +QuantInvestStrats,Python,Visualization,Visualization,visualization,2026-03-22,521,https://github.com/ArturSepp/QuantInvestStrats,"Quantitative Investment Strategies (QIS) package implements Python analytics for visualisation of financial data, performance reporting, analysis of quantitative strategies.",True,False,False,False,ArturSepp/QuantInvestStrats +xts,R,Numerical Libraries & Data Structures,Numerical Libraries & Data Structures,numerical-libraries-data-structures,2026-02-27,222,https://github.com/joshuaulrich/xts,"eXtensible Time Series: Provide for uniform handling of R's different time-based data classes by extending zoo, maximizing native format information preservation and allowing for user level customization and extension, while simplifying cross-class interoperability.",True,False,False,False,joshuaulrich/xts +data.table,R,Numerical Libraries & Data Structures,Numerical Libraries & Data Structures,numerical-libraries-data-structures,2026-03-15,3870,https://github.com/Rdatatable/data.table,"Extension of data.frame: Fast aggregation of large data (e.g. 100GB in RAM), fast ordered joins, fast add/modify/delete of columns by group using no copies at all, list columns and a fast file reader (fread). Offers a natural and flexible syntax, for faster development.",True,False,False,False,Rdatatable/data.table +sparseEigen,R,Numerical Libraries & Data Structures,Numerical Libraries & Data Structures,numerical-libraries-data-structures,2018-12-22,12,https://github.com/dppalomar/sparseEigen,Sparse principal component analysis.,True,False,False,False,dppalomar/sparseEigen +TSdbi,R,Numerical Libraries & Data Structures,Numerical Libraries & Data Structures,numerical-libraries-data-structures,,0,http://tsdbi.r-forge.r-project.org/,Provides a common interface to time series databases.,False,False,False,False, +tseries,R,Numerical Libraries & Data Structures,Numerical Libraries & Data Structures,numerical-libraries-data-structures,2026-02-18,0,https://cran.r-project.org/web/packages/tseries/index.html,Time Series Analysis and Computational Finance.,False,True,False,False, +zoo,R,Numerical Libraries & Data Structures,Numerical Libraries & Data Structures,numerical-libraries-data-structures,2025-12-15,0,https://cran.r-project.org/web/packages/zoo/index.html,S3 Infrastructure for Regular and Irregular Time Series (Z's Ordered Observations).,False,True,False,False, +tis,R,Numerical Libraries & Data Structures,Numerical Libraries & Data Structures,numerical-libraries-data-structures,2021-09-28,0,https://cran.r-project.org/web/packages/tis/index.html,"Functions and S3 classes for time indexes and time indexed series, which are compatible with FAME frequencies.",False,True,False,False, +tfplot,R,Numerical Libraries & Data Structures,Numerical Libraries & Data Structures,numerical-libraries-data-structures,,0,https://cran.r-project.org/web/packages/tfplot/index.html,Utilities for simple manipulation and quick plotting of time series data.,False,True,False,False, +tframe,R,Numerical Libraries & Data Structures,Numerical Libraries & Data Structures,numerical-libraries-data-structures,2019-05-30,0,https://cran.r-project.org/web/packages/tframe/index.html,A kernel of functions for programming time series methods in a way that is relatively independently of the representation of time.,False,True,False,False, +IBrokers,R,Data Sources,Data Sources,data-sources,2022-11-16,0,https://cran.r-project.org/web/packages/IBrokers/index.html,Provides native R access to Interactive Brokers Trader Workstation API.,False,True,False,False, +Rblpapi,R,Data Sources,Data Sources,data-sources,2026-01-10,175,https://github.com/Rblp/Rblpapi,An R Interface to 'Bloomberg' is provided via the 'Blp API'.,True,False,False,False,Rblp/Rblpapi +Rbitcoin,R,Data Sources,Data Sources,data-sources,2016-10-25,57,https://github.com/jangorecki/Rbitcoin,"Unified markets API interface (bitstamp, kraken, btce, bitmarket).",True,False,False,False,jangorecki/Rbitcoin +GetTDData,R,Data Sources,Data Sources,data-sources,2025-05-19,26,https://github.com/msperlin/GetTDData,Downloads and aggregates data for Brazilian government issued bonds directly from the website of Tesouro Direto.,True,False,False,False,msperlin/GetTDData +GetHFData,R,Data Sources,Data Sources,data-sources,2020-06-30,41,https://github.com/msperlin/GetHFData,Downloads and aggregates high frequency trading data for Brazilian instruments directly from Bovespa ftp site.,True,False,False,False,msperlin/GetHFData +td,R,Data Sources,Data Sources,data-sources,2026-02-12,18,https://github.com/eddelbuettel/td,Interfaces the 'twelvedata' API for stocks and (digital and standard) currencies.,True,False,False,False,eddelbuettel/td +rbcb,R,Data Sources,Data Sources,data-sources,2024-01-23,99,https://github.com/wilsonfreitas/rbcb,R interface to Brazilian Central Bank web services.,True,False,False,False,wilsonfreitas/rbcb +rb3,R,Data Sources,Data Sources,data-sources,error,0,https://github.com/ropensci/rb3,A bunch of downloaders and parsers for data delivered from B3.,True,False,False,False,ropensci/rb3 +simfinapi,R,Data Sources,Data Sources,data-sources,2025-08-13,21,https://github.com/matthiasgomolka/simfinapi,Makes 'SimFin' data () easily accessible in R.,True,False,False,False,matthiasgomolka/simfinapi +tidyfinance,R,Data Sources,Data Sources,data-sources,2026-03-16,20,https://github.com/tidy-finance/r-tidyfinance,"Tidy Finance helper functions to download financial data and process the raw data into a structured Format (tidy data), including",True,False,False,False,tidy-finance/r-tidyfinance +RQuantLib,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2026-03-09,131,https://github.com/eddelbuettel/rquantlib,RQuantLib connects GNU R with QuantLib.,True,False,False,False,eddelbuettel/rquantlib +quantmod,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2025-08-07,884,https://cran.r-project.org/web/packages/quantmod/index.html,Quantitative Financial Modelling Framework. [GitHub](https://github.com/joshuaulrich/quantmod),True,True,False,False,joshuaulrich/quantmod +Rmetrics,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,,0,https://www.rmetrics.org,The premier open source software solution for teaching and training quantitative finance.,False,False,False,False, +fAsianOptions,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,,0,https://cran.r-project.org/web/packages/fAsianOptions/index.html,EBM and Asian Option Valuation.,False,True,False,False, +fAssets,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2023-04-24,0,https://cran.r-project.org/web/packages/fAssets/index.html,Analysing and Modelling Financial Assets.,False,True,False,False, +fBasics,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2025-12-07,0,https://cran.r-project.org/web/packages/fBasics/index.html,Markets and Basic Statistics.,False,True,False,False, +fBonds,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2017-11-15,0,https://cran.r-project.org/web/packages/fBonds/index.html,Bonds and Interest Rate Models.,False,True,False,False, +fExoticOptions,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,,0,https://cran.r-project.org/web/packages/fExoticOptions/index.html,Exotic Option Valuation.,False,True,False,False, +fOptions,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,,0,https://cran.r-project.org/web/packages/fOptions/index.html,Pricing and Evaluating Basic Options.,False,True,False,False, +fPortfolio,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2023-04-25,0,https://cran.r-project.org/web/packages/fPortfolio/index.html,Portfolio Selection and Optimization.,False,True,False,False, +portfolio,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2024-08-19,17,https://github.com/dgerlanc/portfolio,Analysing equity portfolios.,True,False,False,False,dgerlanc/portfolio +sparseIndexTracking,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2023-05-28,59,https://github.com/dppalomar/sparseIndexTracking,Portfolio design to track an index.,True,False,False,False,dppalomar/sparseIndexTracking +covFactorModel,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2019-03-25,38,https://github.com/dppalomar/covFactorModel,Covariance matrix estimation via factor models.,True,False,False,False,dppalomar/covFactorModel +riskParityPortfolio,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2022-11-15,121,https://github.com/dppalomar/riskParityPortfolio,Blazingly fast design of risk parity portfolios.,True,False,False,False,dppalomar/riskParityPortfolio +sde,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2025-12-22,0,https://cran.r-project.org/web/packages/sde/index.html,Simulation and Inference for Stochastic Differential Equations.,False,True,False,False, +YieldCurve,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2022-10-02,0,https://cran.r-project.org/web/packages/YieldCurve/index.html,Modelling and estimation of the yield curve.,False,True,False,False, +SmithWilsonYieldCurve,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2024-07-12,0,https://cran.r-project.org/web/packages/SmithWilsonYieldCurve/index.html,Constructs a yield curve by the Smith-Wilson method from a table of LIBOR and SWAP rates.,False,True,False,False, +ycinterextra,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,,0,https://cran.r-project.org/web/packages/ycinterextra/index.html,Yield curve or zero-coupon prices interpolation and extrapolation.,False,True,False,False, +AmericanCallOpt,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,,0,https://cran.r-project.org/web/packages/AmericanCallOpt/index.html,This package includes pricing function for selected American call options with underlying assets that generate payouts.,False,True,False,False, +VarSwapPrice,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,,0,https://cran.r-project.org/web/packages/VarSwapPrice/index.html,Pricing a variance swap on an equity index.,False,True,False,False, +RND,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2017-01-11,0,https://cran.r-project.org/web/packages/RND/index.html,Risk Neutral Density Extraction Package.,False,True,False,False, +LSMonteCarlo,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2013-09-23,0,https://cran.r-project.org/web/packages/LSMonteCarlo/index.html,American options pricing with Least Squares Monte Carlo method.,False,True,False,False, +OptHedging,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2013-10-11,0,https://cran.r-project.org/web/packages/OptHedging/index.html,Estimation of value and hedging strategy of call and put options.,False,True,False,False, +tvm,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2023-08-30,0,https://cran.r-project.org/web/packages/tvm/index.html,Time Value of Money Functions.,False,True,False,False, +OptionPricing,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2023-09-16,0,https://cran.r-project.org/web/packages/OptionPricing/index.html,Option Pricing with Efficient Simulation Algorithms.,False,True,False,False, +credule,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2015-08-05,7,https://github.com/blenezet/credule,Credit Default Swap Functions.,True,False,False,False,blenezet/credule +derivmkts,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2026-02-12,35,https://cran.r-project.org/web/packages/derivmkts/index.html,Functions and R Code to Accompany Derivatives Markets. [GitHub](https://github.com/rmcd1024/derivmkts),True,True,False,False,rmcd1024/derivmkts +FinCal,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2025-10-30,24,https://github.com/felixfan/FinCal,"Package for time value of money calculation, time series analysis and computational finance.",True,False,False,False,felixfan/FinCal +r-quant,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2014-02-19,34,https://github.com/artyyouth/r-quant,R code for quantitative analysis in finance.,True,False,False,False,artyyouth/r-quant +options.studies,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2015-12-17,6,https://github.com/taylorizing/options.studies,options trading studies functions for use with options.data package and shiny.,True,False,False,False,taylorizing/options.studies +PortfolioAnalytics,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2026-03-19,98,https://github.com/braverock/PortfolioAnalytics,"Portfolio Analysis, Including Numerical Methods for Optimizationof Portfolios.",True,False,False,False,braverock/PortfolioAnalytics +fmbasics,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2019-12-03,12,https://github.com/imanuelcostigan/fmbasics,Financial Market Building Blocks.,True,False,False,False,imanuelcostigan/fmbasics +R-fixedincome,R,Financial Instruments and Pricing,Financial Instruments and Pricing,financial-instruments-and-pricing,2025-05-10,64,https://github.com/wilsonfreitas/R-fixedincome,Fixed income tools for R.,True,False,False,False,wilsonfreitas/R-fixedincome +backtest,R,Trading,Trading,trading,2015-09-17,0,https://cran.r-project.org/web/packages/backtest/index.html,Exploring Portfolio-Based Conjectures About Financial Instruments.,False,True,False,False, +pa,R,Trading,Trading,trading,2023-08-21,0,https://cran.r-project.org/web/packages/pa/index.html,Performance Attribution for Equity Portfolios.,False,True,False,False, +TTR,R,Trading,Trading,trading,2026-02-28,342,https://github.com/joshuaulrich/TTR,Technical Trading Rules.,True,False,False,False,joshuaulrich/TTR +QuantTools,R,Trading,Trading,trading,,0,https://quanttools.bitbucket.io/_site/index.html,Enhanced Quantitative Trading Modelling.,False,False,False,False, +blotter,R,Trading,Trading,trading,2024-12-13,118,https://github.com/braverock/blotter,"Transaction infrastructure for defining instruments, transactions, portfolios and accounts for trading systems and simulation. Provides portfolio support for multi-asset class and multi-currency portfolios. Actively maintained and developed.",True,False,False,False,braverock/blotter +quantstrat,R,Backtesting,Backtesting,backtesting,2023-09-14,301,https://github.com/braverock/quantstrat,Transaction-oriented infrastructure for constructing trading systems and simulation. Provides support for multi-asset class and multi-currency portfolios for backtesting and other financial research.,True,False,False,False,braverock/quantstrat +PerformanceAnalytics,R,Risk Analysis,Risk Analysis,risk-analysis,2026-03-05,235,https://github.com/braverock/PerformanceAnalytics,Econometric tools for performance and risk analysis.,True,False,False,False,braverock/PerformanceAnalytics +FactorAnalytics,R,Factor Analysis,Factor Analysis,factor-analysis,2024-12-12,85,https://github.com/braverock/FactorAnalytics,"The FactorAnalytics package contains fitting and analysis methods for the three main types of factor models used in conjunction with portfolio construction, optimization and risk management, namely fundamental factor models, time series factor models and statistical factor models.",True,False,False,False,braverock/FactorAnalytics +Expected Returns,R,Factor Analysis,Factor Analysis,factor-analysis,2025-08-12,56,https://github.com/JustinMShea/ExpectedReturns,"Solutions for enhancing portfolio diversification and replications of seminal papers with R, most of which are discussed in one of the best investment references of the recent decade, Expected Returns: An Investors Guide to Harvesting Market Rewards by Antti Ilmanen.",True,False,False,False,JustinMShea/ExpectedReturns +tseries,R,Time Series,Time Series,time-series,2026-02-18,0,https://cran.r-project.org/web/packages/tseries/index.html,Time Series Analysis and Computational Finance.,False,True,False,False, +fGarch,R,Time Series,Time Series,time-series,2025-12-12,0,https://cran.r-project.org/web/packages/fGarch/index.html,Rmetrics - Autoregressive Conditional Heteroskedastic Modelling.,False,True,False,False, +timeSeries,R,Time Series,Time Series,time-series,2025-12-12,0,https://cran.r-project.org/web/packages/timeSeries/index.html,Rmetrics - Financial Time Series Objects.,False,True,False,False, +rugarch,R,Time Series,Time Series,time-series,2026-03-13,31,https://github.com/alexiosg/rugarch,Univariate GARCH Models.,True,False,False,False,alexiosg/rugarch +rmgarch,R,Time Series,Time Series,time-series,2025-08-31,17,https://github.com/alexiosg/rmgarch,Multivariate GARCH Models.,True,False,False,False,alexiosg/rmgarch +tidypredict,R,Time Series,Time Series,time-series,2021-09-28,3,https://github.com/edgararuiz/tidypredict,Run predictions inside the database .,True,False,False,False,edgararuiz/tidypredict +tidyquant,R,Time Series,Time Series,time-series,2026-03-16,900,https://github.com/business-science/tidyquant,Bringing financial analysis to the tidyverse.,True,False,False,False,business-science/tidyquant +timetk,R,Time Series,Time Series,time-series,2025-08-29,639,https://github.com/business-science/timetk,A toolkit for working with time series in R.,True,False,False,False,business-science/timetk +tibbletime,R,Time Series,Time Series,time-series,2024-12-03,177,https://github.com/business-science/tibbletime,"Built on top of the tidyverse, tibbletime is an extension that allows for the creation of time aware tibbles through the setting of a time index.",True,False,False,False,business-science/tibbletime +matrixprofile,R,Time Series,Time Series,time-series,2022-11-25,387,https://github.com/matrix-profile-foundation/matrixprofile,Time series data mining library built on top of the novel Matrix Profile data structure and algorithms.,True,False,False,False,matrix-profile-foundation/matrixprofile +garchmodels,R,Time Series,Time Series,time-series,2022-08-11,35,https://github.com/AlbertoAlmuinha/garchmodels,A parsnip backend for GARCH models.,True,False,False,False,AlbertoAlmuinha/garchmodels +timeDate,R,Calendars,Calendars,calendars,2026-01-28,0,https://cran.r-project.org/web/packages/timeDate/index.html,Chronological and Calendar Objects,False,True,False,False, +bizdays,R,Calendars,Calendars,calendars,2025-01-08,57,https://github.com/wilsonfreitas/R-bizdays,Business days calculations and utilities,True,False,False,False,wilsonfreitas/R-bizdays +RunMat,Matlab,Alternatives,Alternatives,alternatives,2026-03-20,194,https://runmat.org,"High performance, Open Source, MATLAB syntax runtime. [GitHub](https://github.com/runmat-org/runmat)",True,False,False,False,runmat-org/runmat +QUANTAXIS,Matlab,FrameWorks,FrameWorks,frameworks,2026-02-28,10134,https://github.com/yutiansut/quantaxis,Integrated Quantitative Toolbox with Matlab.,True,False,False,False,yutiansut/quantaxis +PROJ_Option_Pricing_Matlab,Matlab,FrameWorks,FrameWorks,frameworks,2024-11-19,208,https://github.com/jkirkby3/PROJ_Option_Pricing_Matlab,"Quant Option Pricing - Exotic/Vanilla: Barrier, Asian, European, American, Parisian, Lookback, Cliquet, Variance Swap, Swing, Forward Starting, Step, Fader",True,False,False,False,jkirkby3/PROJ_Option_Pricing_Matlab +CcyConv.jl,Julia,,,julia,2025-10-14,25,https://github.com/bhftbootcamp/CcyConv.jl,Currency conversion library for Julia,True,False,False,False,bhftbootcamp/CcyConv.jl +CryptoExchangeAPIs.jl,Julia,,,julia,2025-11-27,30,https://github.com/bhftbootcamp/CryptoExchangeAPIs.jl,A Julia library for cryptocurrency exchange APIs,True,False,False,False,bhftbootcamp/CryptoExchangeAPIs.jl +Fastback.jl,Julia,,,julia,2026-03-01,19,https://github.com/rbeeli/Fastback.jl,Blazing fast Julia backtester.,True,False,False,False,rbeeli/Fastback.jl +Lucky.jl,Julia,,,julia,2026-03-09,26,https://github.com/oliviermilla/Lucky.jl,"Modular, asynchronous trading engine in pure Julia.",True,False,False,False,oliviermilla/Lucky.jl +QuantLib.jl,Julia,,,julia,2020-02-18,143,https://github.com/pazzo83/QuantLib.jl,Quantlib implementation in pure Julia.,True,False,False,False,pazzo83/QuantLib.jl +Ito.jl,Julia,,,julia,2017-03-21,39,https://github.com/aviks/Ito.jl,A Julia package for quantitative finance.,True,False,False,False,aviks/Ito.jl +LightweightCharts.jl,Julia,,,julia,2026-01-20,48,https://github.com/bhftbootcamp/LightweightCharts.jl,Julia wrapper for Lightweight Charts™ by TradingView.,True,False,False,False,bhftbootcamp/LightweightCharts.jl +TALib.jl,Julia,,,julia,2017-08-22,52,https://github.com/femtotrader/TALib.jl,A Julia wrapper for TA-Lib.,True,False,False,False,femtotrader/TALib.jl +Miletus.jl,Julia,,,julia,2023-12-07,90,https://github.com/JuliaComputing/Miletus.jl,"A financial contract definition, modeling language, and valuation framework.",True,False,False,False,JuliaComputing/Miletus.jl +Temporal.jl,Julia,,,julia,2021-12-28,101,https://github.com/dysonance/Temporal.jl,Flexible and efficient time series class & methods.,True,False,False,False,dysonance/Temporal.jl +Indicators.jl,Julia,,,julia,2022-12-06,227,https://github.com/dysonance/Indicators.jl,Financial market technical analysis & indicators on top of Temporal.,True,False,False,False,dysonance/Indicators.jl +Strategems.jl,Julia,,,julia,2021-04-06,167,https://github.com/dysonance/Strategems.jl,Quantitative systematic trading strategy development and backtesting.,True,False,False,False,dysonance/Strategems.jl +TimeSeries.jl,Julia,,,julia,2026-01-26,368,https://github.com/JuliaStats/TimeSeries.jl,Time series toolkit for Julia.,True,False,False,False,JuliaStats/TimeSeries.jl +TechnicalIndicatorCharts.jl,Julia,,,julia,2026-03-09,6,https://github.com/g-gundam/TechnicalIndicatorCharts.jl,Visualize OnlineTechnicalIndicators.jl using LightweightCharts.jl.,True,False,False,False,g-gundam/TechnicalIndicatorCharts.jl +MarketTechnicals.jl,Julia,,,julia,2021-07-12,130,https://github.com/JuliaQuant/MarketTechnicals.jl,Technical analysis of financial time series on top of TimeSeries.,True,False,False,False,JuliaQuant/MarketTechnicals.jl +MarketData.jl,Julia,,,julia,2025-11-10,163,https://github.com/JuliaQuant/MarketData.jl,Time series market data.,True,False,False,False,JuliaQuant/MarketData.jl +OnlineTechnicalIndicators.jl,Julia,,,julia,2026-01-06,33,https://github.com/femtotrader/OnlineTechnicalIndicators.jl,Julia Technical Analysis Indicators via online algorithms.,True,False,False,False,femtotrader/OnlineTechnicalIndicators.jl +OnlinePortfolioAnalytics.jl,Julia,,,julia,2026-01-06,13,https://github.com/femtotrader/OnlinePortfolioAnalytics.jl,A Julia quantitative portfolio analytics (risk / performance) via online algorithms.,True,False,False,False,femtotrader/OnlinePortfolioAnalytics.jl +OnlineResamplers.jl,Julia,,,julia,2026-01-06,2,https://github.com/femtotrader/OnlineResamplers.jl,High-performance Julia package for real-time resampling of financial market data.,True,False,False,False,femtotrader/OnlineResamplers.jl +RiskPerf.jl,Julia,,,julia,2026-02-02,15,https://github.com/rbeeli/RiskPerf.jl,Quantitative risk and performance analysis package for financial time series powered by the Julia language.,True,False,False,False,rbeeli/RiskPerf.jl +TimeFrames.jl,Julia,,,julia,2026-03-09,4,https://github.com/femtotrader/TimeFrames.jl,A Julia library that defines TimeFrame (essentially for resampling TimeSeries).,True,False,False,False,femtotrader/TimeFrames.jl +DataFrames.jl,Julia,,,julia,2026-03-17,1819,https://github.com/JuliaData/DataFrames.jl,In-memory tabular data in Julia,True,False,False,False,JuliaData/DataFrames.jl +TSFrames.jl,Julia,,,julia,2024-06-18,100,https://github.com/xKDR/TSFrames.jl,Handle timeseries data on top of the powerful and mature DataFrames.jl,True,False,False,False,xKDR/TSFrames.jl +TimeArrays.jl,Julia,,,julia,2025-10-15,38,https://github.com/bhftbootcamp/TimeArrays.jl,Time series handling for Julia,True,False,False,False,bhftbootcamp/TimeArrays.jl +Strata,Java,,,java,2026-03-11,929,http://strata.opengamma.io/,Modern open-source analytics and market risk library designed and written in Java. [GitHub](https://github.com/OpenGamma/Strata),True,False,False,False,OpenGamma/Strata +JQuantLib,Java,,,java,2016-02-26,152,https://github.com/frgomes/jquantlib,"JQuantLib is a free, open-source, comprehensive framework for quantitative finance, written in 100% Java.",True,False,False,False,frgomes/jquantlib +finmath.net,Java,,,java,2026-02-20,558,http://finmath.net,Java library with algorithms and methodologies related to mathematical finance. [GitHub](https://github.com/finmath/finmath-lib),True,False,False,False,finmath/finmath-lib +quantcomponents,Java,,,java,2015-10-07,169,https://github.com/lsgro/quantcomponents,Free Java components for Quantitative Finance and Algorithmic Trading.,True,False,False,False,lsgro/quantcomponents +DRIP,Java,,,java,,0,https://lakshmidrip.github.io/DRIP,"Fixed Income, Asset Allocation, Transaction Cost Analysis, XVA Metrics Libraries.",False,False,False,False, +ta4j,Java,,,java,2026-03-15,2395,https://github.com/ta4j/ta4j,A Java library for technical analysis.,True,False,False,False,ta4j/ta4j +finance.js,JavaScript,,,javascript,2018-10-11,1266,https://github.com/ebradyjobory/finance.js,A JavaScript library for common financial calculations.,True,False,False,False,ebradyjobory/finance.js +portfolio-allocation,JavaScript,,,javascript,2022-08-11,187,https://github.com/lequant40/portfolio_allocation_js,"PortfolioAllocation is a JavaScript library designed to help constructing financial portfolios made of several assets: bonds, commodities, cryptocurrencies, currencies, exchange traded funds (ETFs), mutual funds, stocks...",True,False,False,False,lequant40/portfolio_allocation_js +Ghostfolio,JavaScript,,,javascript,2026-03-22,7980,https://github.com/ghostfolio/ghostfolio,"Wealth management software to keep track of financial assets like stocks, ETFs or cryptocurrencies and make solid, data-driven investment decisions.",True,False,False,False,ghostfolio/ghostfolio +IndicatorTS,JavaScript,,,javascript,2025-02-26,429,https://github.com/cinar/indicatorts,"Indicator is a TypeScript module providing various stock technical analysis indicators, strategies, and a backtest framework for trading.",True,False,False,False,cinar/indicatorts +chart-patterns,JavaScript,,,javascript,error,0,https://github.com/focus1691/chart-patterns,"Technical analysis library for Market Profile, Volume Profile, Stacked Imbalances and High Volume Node indicators.",True,False,False,False,focus1691/chart-patterns +orderflow,JavaScript,,,javascript,2025-03-31,65,https://github.com/focus1691/orderflow,Orderflow trade aggregator for building Footprint Candles from exchange websocket data.,True,False,False,False,focus1691/orderflow +ccxt,JavaScript,,,javascript,2026-03-21,41465,https://github.com/ccxt/ccxt,A JavaScript / Python / PHP cryptocurrency trading API with support for more than 100 bitcoin/altcoin exchanges.,True,False,False,False,ccxt/ccxt +SimpleFunctions,JavaScript,,,javascript,2026-03-21,1,https://github.com/spfunctions/simplefunctions-cli,"Prediction market intelligence CLI for Kalshi and Polymarket. Causal thesis models, edge detection, 24/7 orderbook monitoring, what-if scenarios, and trade execution. MCP server for AI agent integration.",True,False,False,False,spfunctions/simplefunctions-cli +PENDAX,JavaScript,,,javascript,2024-05-09,48,https://github.com/CompendiumFi/PENDAX-SDK,"Javascript SDK for Trading/Data API and Websockets for FTX, FTXUS, OKX, Bybit, & More.",True,False,False,False,CompendiumFi/PENDAX-SDK +PreReason,JavaScript,,,javascript,2026-03-22,0,https://github.com/PreReason/mcp,"Pre-analyzed Bitcoin and macro market briefings for AI agents. 17 contexts with trend signals, confidence scores, and regime classification via REST API and MCP.",True,False,False,False,PreReason/mcp +pmxt,JavaScript,,,javascript,2026-03-22,1139,https://github.com/pmxt-dev/pmxt,"The CCXT for prediction markets. A unified API for trading on Polymarket, Kalshi, and more.",True,False,False,False,pmxt-dev/pmxt +pmxt,JavaScript,,,javascript,2026-03-22,1139,https://github.com/qoery-com/pmxt,A unified API for accessing prediction market data across multiple exchanges. CCXT for prediction markets.,True,False,False,False,qoery-com/pmxt +rebalance,JavaScript,,,javascript,2026-03-01,2,https://github.com/cjroth/rebalance,"Interactive portfolio rebalancing tool that imports brokerage CSV data, sets target allocations, and generates trade instructions.",True,False,False,False,cjroth/rebalance +QUANTAXIS_Webkit,JavaScript,Data Visualization,Data Visualization,data-visualization,2017-07-30,37,https://github.com/yutiansut/QUANTAXIS_Webkit,An awesome visualization center based on quantaxis.,True,False,False,False,yutiansut/QUANTAXIS_Webkit +quantfin,Haskell,,,haskell,2019-04-06,139,https://github.com/boundedvariation/quantfin,quant finance in pure haskell.,True,False,False,False,boundedvariation/quantfin +Haxcel,Haskell,,,haskell,2022-09-13,37,https://github.com/MarcusRainbow/Haxcel,Excel Addin for Haskell.,True,False,False,False,MarcusRainbow/Haxcel +Ffinar,Haskell,,,haskell,2021-11-26,5,https://github.com/MarcusRainbow/Ffinar,A financial maths library in Haskell.,True,False,False,False,MarcusRainbow/Ffinar +QuantScale,Scala,,,scala,2014-01-14,50,https://github.com/choucrifahed/quantscale,Scala Quantitative Finance Library.,True,False,False,False,choucrifahed/quantscale +Scala Quant,Scala,,,scala,2017-05-06,10,https://github.com/frankcash/Scala-Quant,Scala library for working with stock data from IFTTT recipes or Google Finance.,True,False,False,False,frankcash/Scala-Quant +Jiji,Ruby,,,ruby,2019-01-22,249,https://github.com/unageanu/jiji2,Open Source Forex algorithmic trading framework using OANDA REST API.,True,False,False,False,unageanu/jiji2 +Tai,Elixir/Erlang,,,elixir-erlang,2024-12-06,493,https://github.com/fremantle-capital/tai,"Open Source composable, real time, market data and trade execution toolkit.",True,False,False,False,fremantle-capital/tai +Workbench,Elixir/Erlang,,,elixir-erlang,2022-06-06,121,https://github.com/fremantle-industries/workbench,From Idea to Execution - Manage your trading operation across a globally distributed cluster,True,False,False,False,fremantle-industries/workbench +Prop,Elixir/Erlang,,,elixir-erlang,2022-06-06,55,https://github.com/fremantle-industries/prop,"An open and opinionated trading platform using productive & familiar open source libraries and tools for strategy research, execution and operation.",True,False,False,False,fremantle-industries/prop +Kelp,Golang,,,golang,2021-11-26,1122,https://github.com/stellar/kelp,Kelp is an open-source Golang algorithmic cryptocurrency trading bot that runs on centralized exchanges and Stellar DEX (command-line usage and desktop GUI).,True,False,False,False,stellar/kelp +marketstore,Golang,,,golang,error,0,https://github.com/alpacahq/marketstore,DataFrame Server for Financial Timeseries Data.,True,False,False,False,alpacahq/marketstore +IndicatorGo,Golang,,,golang,2026-03-02,828,https://github.com/cinar/indicator,"IndicatorGo is a Golang module providing various stock technical analysis indicators, strategies, and a backtest framework for trading.",True,False,False,False,cinar/indicator +QuantLib,CPP,,,cpp,2026-03-17,6889,https://github.com/lballabio/QuantLib,The QuantLib project is aimed at providing a comprehensive software framework for quantitative finance.,True,False,False,False,lballabio/QuantLib +QuantLibRisks,CPP,,,cpp,2026-02-06,38,https://github.com/auto-differentiation/QuantLib-Risks-Cpp,Fast risks with QuantLib in C++,True,False,False,False,auto-differentiation/QuantLib-Risks-Cpp +XAD,CPP,,,cpp,2026-02-06,411,https://github.com/auto-differentiation/xad,Automatic Differentation (AAD) Library,True,False,False,False,auto-differentiation/xad +TradeFrame,CPP,,,cpp,2026-03-05,651,https://github.com/rburkholder/trade-frame,C++ 17 based framework/library (with sample applications) for testing options based automated trading ideas using DTN IQ real time data feed and Interactive Brokers (TWS API) for trade execution. Comes with built-in [Option Greeks/IV](https://github.com/rburkholder/trade-frame/tree/master/lib/TFOptions) calculation library.,True,False,False,False,rburkholder/trade-frame +Hikyuu,CPP,,,cpp,2026-03-22,3053,https://github.com/fasiondog/hikyuu,"A base on Python/C++ open source high-performance quant framework for faster analysis and backtesting, contains the complete trading system components for reuse and combination. You can use python or c++ freely.",True,False,False,False,fasiondog/hikyuu +OrderMatchingEngine,CPP,,,cpp,2026-01-11,128,https://github.com/PIYUSH-KUMAR1809/order-matching-engine,"A production-grade, lock-free, high-frequency trading matching engine achieving 150M+ orders/sec.",True,False,False,False,PIYUSH-KUMAR1809/order-matching-engine +PandoraTrader,CPP,,,cpp,2025-07-29,1363,https://github.com/pegasusTrader/PandoraTrader,"A C++ CTP trading framework, with very clear logic",True,False,False,False,pegasusTrader/PandoraTrader +NexusFix,CPP,,,cpp,2026-03-22,11,https://github.com/SilverstreamsAI/NexusFix,"C++23 FIX protocol engine with zero-copy parsing and SIMD acceleration, 3x faster than QuickFIX.",True,False,False,False,SilverstreamsAI/NexusFix +QuantLib,Frameworks,,,frameworks,2026-03-17,6889,https://github.com/lballabio/QuantLib,The QuantLib project is aimed at providing a comprehensive software framework for quantitative finance.,True,False,False,False,lballabio/QuantLib +JQuantLib,Frameworks,,,frameworks,2016-02-26,152,https://github.com/frgomes/jquantlib,Java port.,True,False,False,False,frgomes/jquantlib +RQuantLib,Frameworks,,,frameworks,2026-03-09,131,https://github.com/eddelbuettel/rquantlib,R port.,True,False,False,False,eddelbuettel/rquantlib +QuantLibAddin,Frameworks,,,frameworks,,0,https://www.quantlib.org/quantlibaddin/,Excel support.,False,False,False,False, +QuantLibXL,Frameworks,,,frameworks,,0,https://www.quantlib.org/quantlibxl/,Excel support.,False,False,False,False, +QLNet,Frameworks,,,frameworks,2026-03-10,422,https://github.com/amaggiulli/qlnet,.Net port.,True,False,False,False,amaggiulli/qlnet +PyQL,Frameworks,,,frameworks,2025-08-20,1261,https://github.com/enthought/pyql,Python port.,True,False,False,False,enthought/pyql +QuantLib.jl,Frameworks,,,frameworks,2020-02-18,143,https://github.com/pazzo83/QuantLib.jl,Julia port.,True,False,False,False,pazzo83/QuantLib.jl +QuantLib-Python Documentation,Frameworks,,,frameworks,,0,https://quantlib-python-docs.readthedocs.io/,Documentation for the Python bindings for the QuantLib library,False,False,False,False, +TA-Lib,Frameworks,,,frameworks,2025-10-19,1504,https://ta-lib.org,perform technical analysis of financial market data. [GitHub](https://github.com/TA-Lib/ta-lib),True,False,False,False,TA-Lib/ta-lib +QuantConnect,CSharp,,,csharp,2026-03-14,18004,https://github.com/QuantConnect/Lean,Lean Engine is an open-source fully managed C# algorithmic trading engine built for desktop and cloud usage.,True,False,False,False,QuantConnect/Lean +StockSharp,CSharp,,,csharp,2026-03-21,9301,https://github.com/StockSharp/StockSharp,"Algorithmic trading and quantitative trading open source platform to develop trading robots (stock markets, forex, crypto, bitcoins, and options).",True,False,False,False,StockSharp/StockSharp +TDAmeritrade.DotNetCore,CSharp,,,csharp,2023-03-10,56,https://github.com/NVentimiglia/TDAmeritrade.DotNetCore,"Free, open-source .NET Client for the TD Ameritrade Trading Platform. Helps developers integrate TD Ameritrade API into custom trading solutions.",True,False,False,False,NVentimiglia/TDAmeritrade.DotNetCore +QuantMath,Rust,,,rust,2020-05-28,402,https://github.com/MarcusRainbow/QuantMath,Financial maths library for risk-neutral pricing and risk,True,False,False,False,MarcusRainbow/QuantMath +Barter,Rust,,,rust,2026-03-05,2022,https://github.com/barter-rs/barter-rs,Open-source Rust framework for building event-driven live-trading & backtesting systems,True,False,False,False,barter-rs/barter-rs +LFEST,Rust,,,rust,2026-02-05,77,https://github.com/MathisWellmann/lfest-rs,Simulated perpetual futures exchange to trade your strategy against.,True,False,False,False,MathisWellmann/lfest-rs +TradeAggregation,Rust,,,rust,2026-02-05,115,https://github.com/MathisWellmann/trade_aggregation-rs,Aggregate trades into user-defined candles using information driven rules.,True,False,False,False,MathisWellmann/trade_aggregation-rs +OpenFinClaw,Rust,,,rust,2026-03-22,120,https://github.com/cryptoSUN2049/openFinclaw,"AI-native one-person hedge fund platform with Rust trading engine. Natural language → strategy → backtest → execution in 60s. Multi-market (US/HK/CN/Crypto), self-evolving strategy pipeline. Built on OpenClaw (68K+ stars).",True,False,False,False,cryptoSUN2049/openFinclaw +SlidingFeatures,Rust,,,rust,2026-02-18,72,https://github.com/MathisWellmann/sliding_features-rs,Chainable tree-like sliding windows for signal processing and technical analysis.,True,False,False,False,MathisWellmann/sliding_features-rs +RustQuant,Rust,,,rust,2026-01-14,1683,https://github.com/avhz/RustQuant,Quantitative finance library written in Rust.,True,False,False,False,avhz/RustQuant +fin-primitives,Rust,,,rust,2026-03-21,4,https://github.com/Mattbusel/fin-primitives,"Financial market primitives in Rust: Price/Quantity/Symbol newtypes, BTreeMap order book, OHLCV aggregation, SMA/EMA/RSI indicators, position ledger with PnL, and composable risk monitor.",True,False,False,False,Mattbusel/fin-primitives +fin-stream,Rust,,,rust,2026-03-21,2,https://github.com/Mattbusel/fin-stream,"Real-time market data streaming in Rust: lock-free SPSC ring buffer, 100K+ ticks/second ingestion, multi-timeframe OHLCV construction, and Lorentz transforms on financial time series.",True,False,False,False,Mattbusel/fin-stream +Special-Relativity-in-Financial-Modeling,Rust,,,rust,2026-03-19,4,https://github.com/Mattbusel/Special-Relativity-in-Financial-Modeling,"C++20 implementation of special-relativistic geometry applied to OHLCV data: Lorentz factors, spacetime intervals, Christoffel symbols, and geodesic deviation signals from live market data. DOI: 10.5281/zenodo.18639919",True,False,False,False,Mattbusel/Special-Relativity-in-Financial-Modeling +finalytics,Rust,,,rust,2026-02-17,67,https://github.com/Nnamdi-sys/finalytics,A rust library for financial data analysis.,True,False,False,False,Nnamdi-sys/finalytics +RunMat,Rust,,,rust,2026-03-20,194,https://github.com/runmat-org/runmat,Rust runtime for MATLAB-syntax array math with automatic CPU/GPU execution and fused kernels for quant simulations.,True,False,False,False,runmat-org/runmat +Auto-Differentiation Website,"Reproducing Works, Training & Books",,,reproducing-works-training-books,,0,https://auto-differentiation.github.io/,Background and resources on Automatic Differentiation (AD) / Adjoint Algorithmic Differentitation (AAD).,False,False,False,False, +Derman Papers,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2017-10-21,507,https://github.com/MarcosCarreira/DermanPapers,Notebooks that replicate original quantitative finance papers from Emanuel Derman.,True,False,False,False,MarcosCarreira/DermanPapers +volatility-trading,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2024-10-21,1881,https://github.com/jasonstrimpel/volatility-trading,A complete set of volatility estimators based on Euan Sinclair's Volatility Trading.,True,False,False,False,jasonstrimpel/volatility-trading +quant,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2015-07-14,405,https://github.com/paulperry/quant,"Quantitative Finance and Algorithmic Trading exhaust; mostly ipython notebooks based on Quantopian, Zipline, or Pandas.",True,False,False,False,paulperry/quant +fecon235,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2018-12-03,1255,https://github.com/rsvp/fecon235,Open source project for software tools in financial economics. Many jupyter notebook to verify theoretical ideas and practical methods interactively.,True,False,False,False,rsvp/fecon235 +Quantitative-Notebooks,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2020-07-02,1315,https://github.com/LongOnly/Quantitative-Notebooks,"Educational notebooks on quantitative finance, algorithmic trading, financial modelling and investment strategy",True,False,False,False,LongOnly/Quantitative-Notebooks +QuantEcon,"Reproducing Works, Training & Books",,,reproducing-works-training-books,,0,https://quantecon.org/,"Lecture series on economics, finance, econometrics and data science; QuantEcon.py, QuantEcon.jl, notebooks",False,False,False,False, +FinanceHub,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2021-05-25,782,https://github.com/Finance-Hub/FinanceHub,Resources for Quantitative Finance,True,False,False,False,Finance-Hub/FinanceHub +Python_Option_Pricing,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2025-05-13,828,https://github.com/dedwards25/Python_Option_Pricing,"An library to price financial options written in Python. Includes: Black Scholes, Black 76, Implied Volatility, American, European, Asian, Spread Options.",True,False,False,False,dedwards25/Python_Option_Pricing +python-training,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2023-11-27,12862,https://github.com/jpmorganchase/python-training,J.P. Morgan's Python training for business analysts and traders.,True,False,False,False,jpmorganchase/python-training +Stock_Analysis_For_Quant,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2025-05-04,1985,https://github.com/LastAncientOne/Stock_Analysis_For_Quant,"Different Types of Stock Analysis in Excel, Matlab, Power BI, Python, R, and Tableau.",True,False,False,False,LastAncientOne/Stock_Analysis_For_Quant +algorithmic-trading-with-python,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2021-06-01,3264,https://github.com/chrisconlan/algorithmic-trading-with-python,Source code for Algorithmic Trading with Python (2020) by Chris Conlan.,True,False,False,False,chrisconlan/algorithmic-trading-with-python +MEDIUM_NoteBook,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2024-09-22,2138,https://github.com/cerlymarco/MEDIUM_NoteBook,Repository containing notebooks of [cerlymarco](https://github.com/cerlymarco)'s posts on Medium.,True,False,False,False,cerlymarco/MEDIUM_NoteBook +QuantFinance,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2025-09-02,605,https://github.com/PythonCharmers/QuantFinance,Training materials in quantitative finance.,True,False,False,False,PythonCharmers/QuantFinance +IPythonScripts,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2026-02-28,175,https://github.com/mgroncki/IPythonScripts,"Tutorials about Quantitative Finance in Python and QuantLib: Pricing, xVAs, Hedging, Portfolio Optimisation, Machine Learning and Deep Learning.",True,False,False,False,mgroncki/IPythonScripts +Computational-Finance-Course,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2024-03-01,491,https://github.com/LechGrzelak/Computational-Finance-Course,Materials for the course of Computational Finance.,True,False,False,False,LechGrzelak/Computational-Finance-Course +Machine-Learning-for-Asset-Managers,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2025-01-29,615,https://github.com/emoen/Machine-Learning-for-Asset-Managers,"Implementation of code snippets, exercises and application to live data from Machine Learning for Asset Managers (Elements in Quantitative Finance) written by Prof. Marcos López de Prado.",True,False,False,False,emoen/Machine-Learning-for-Asset-Managers +Python-for-Finance-Cookbook,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2026-03-02,785,https://github.com/PacktPublishing/Python-for-Finance-Cookbook,"Python for Finance Cookbook, published by Packt.",True,False,False,False,PacktPublishing/Python-for-Finance-Cookbook +modelos_vol_derivativos,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2023-08-19,59,https://github.com/ysaporito/modelos_vol_derivativos,"""Modelos de Volatilidade para Derivativos"" book's Jupyter notebooks",True,False,False,False,ysaporito/modelos_vol_derivativos +NMOF,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2025-10-27,38,https://github.com/enricoschumann/NMOF,"Functions, examples and data from the first and the second edition of ""Numerical Methods and Optimization in Finance"" by M. Gilli, D. Maringer and E. Schumann (2019, ISBN:978-0128150658).",True,False,False,False,enricoschumann/NMOF +py4fi2nd,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2025-06-06,2148,https://github.com/yhilpisch/py4fi2nd,"Jupyter Notebooks and code for Python for Finance (2nd ed., O'Reilly) by Yves Hilpisch.",True,False,False,False,yhilpisch/py4fi2nd +aiif,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2023-10-09,385,https://github.com/yhilpisch/aiif,Jupyter Notebooks and code for the book Artificial Intelligence in Finance (O'Reilly) by Yves Hilpisch.,True,False,False,False,yhilpisch/aiif +py4at,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2023-10-09,826,https://github.com/yhilpisch/py4at,Jupyter Notebooks and code for the book Python for Algorithmic Trading (O'Reilly) by Yves Hilpisch.,True,False,False,False,yhilpisch/py4at +dawp,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2021-02-22,633,https://github.com/yhilpisch/dawp,Jupyter Notebooks and code for Derivatives Analytics with Python (Wiley Finance) by Yves Hilpisch.,True,False,False,False,yhilpisch/dawp +dx,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2025-04-05,767,https://github.com/yhilpisch/dx,DX Analytics | Financial and Derivatives Analytics with Python.,True,False,False,False,yhilpisch/dx +QuantFinanceBook,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2025-04-14,858,https://github.com/LechGrzelak/QuantFinanceBook,Quantitative Finance book.,True,False,False,False,LechGrzelak/QuantFinanceBook +rough_bergomi,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2018-09-17,141,https://github.com/ryanmccrickerd/rough_bergomi,A Python implementation of the rough Bergomi model.,True,False,False,False,ryanmccrickerd/rough_bergomi +frh-fx,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2018-05-24,13,https://github.com/ryanmccrickerd/frh-fx,A python implementation of the fast-reversion Heston model of Mechkov for FX purposes.,True,False,False,False,ryanmccrickerd/frh-fx +Value Investing Studies,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2021-10-26,92,https://github.com/euclidjda/value-investing-studies,A collection of data analysis studies that examine the performance and characteristics of value investing over long periods of time.,True,False,False,False,euclidjda/value-investing-studies +Machine Learning Asset Management,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2021-12-17,1734,https://github.com/firmai/machine-learning-asset-management,Machine Learning in Asset Management (by @firmai).,True,False,False,False,firmai/machine-learning-asset-management +Deep Learning Machine Learning Stock,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2024-03-01,1723,https://github.com/LastAncientOne/Deep-Learning-Machine-Learning-Stock,Deep Learning and Machine Learning stocks represent a promising long-term or short-term opportunity for investors and traders.,True,False,False,False,LastAncientOne/Deep-Learning-Machine-Learning-Stock +Technical Analysis and Feature Engineering,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2024-02-16,198,https://github.com/jo-cho/Technical_Analysis_and_Feature_Engineering,Feature Engineering and Feature Importance of Machine Learning in Financial Market.,True,False,False,False,jo-cho/Technical_Analysis_and_Feature_Engineering +Differential Machine Learning and Axes that matter by Brian Huge and Antoine Savine,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2022-10-05,148,https://github.com/differential-machine-learning/notebooks,"Implement, demonstrate, reproduce and extend the results of the Risk articles 'Differential Machine Learning' (2020) and 'PCA with a Difference' (2021) by Huge and Savine, and cover implementation details left out from the papers.",True,False,False,False,differential-machine-learning/notebooks +systematictradingexamples,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2020-07-22,461,https://github.com/robcarver17/systematictradingexamples,Examples of code related to book [Systematic Trading](www.systematictrading.org) and [blog](http://qoppac.blogspot.com),True,False,False,False,robcarver17/systematictradingexamples +pysystemtrade_examples,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2018-02-21,259,https://github.com/robcarver17/pysystemtrade_examples,Examples using pysystemtrade for Robert Carver's [blog](http://qoppac.blogspot.com).,True,False,False,False,robcarver17/pysystemtrade_examples +ML_Finance_Codes,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2020-06-13,2526,https://github.com/mfrdixon/ML_Finance_Codes,Machine Learning in Finance: From Theory to Practice Book,True,False,False,False,mfrdixon/ML_Finance_Codes +Hands-On Machine Learning for Algorithmic Trading,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2023-01-18,1815,https://github.com/packtpublishing/hands-on-machine-learning-for-algorithmic-trading,"Hands-On Machine Learning for Algorithmic Trading, published by Packt",True,False,False,False,packtpublishing/hands-on-machine-learning-for-algorithmic-trading +financialnoob-misc,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2024-08-26,28,https://github.com/financialnoob/misc,Codes from @financialnoob's posts,True,False,False,False,financialnoob/misc +MesoSim Options Trading Strategy Library,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2024-04-06,20,https://github.com/deltaray-io/strategy-library,Free and public Options Trading strategy library for MesoSim. ,True,False,False,False,deltaray-io/strategy-library +Quant-Finance-With-Python-Code,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2026-01-15,168,https://github.com/lingyixu/Quant-Finance-With-Python-Code,Repo for code examples in Quantitative Finance with Python by Chris Kelliher,True,False,False,False,lingyixu/Quant-Finance-With-Python-Code +QuantFinanceTraining,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2024-02-20,40,https://github.com/JoaoJungblut/QuantFinanceTraining,"This repository contains codes that were executed during my training in the CQF (Certificate in Quantitative Finance). The codes are organized by class, facilitating navigation and reference.",True,False,False,False,JoaoJungblut/QuantFinanceTraining +Statistical-Learning-based-Portfolio-Optimization,"Reproducing Works, Training & Books",,,reproducing-works-training-books,error,0,https://github.com/YannickKae/Statistical-Learning-based-Portfolio-Optimization,"This R Shiny App utilizes the Hierarchical Equal Risk Contribution (HERC) approach, a modern portfolio optimization method developed by Raffinot (2018).",True,False,False,False,YannickKae/Statistical-Learning-based-Portfolio-Optimization +book_irds3,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2022-10-29,114,https://github.com/attack68/book_irds3,Code repository for Pricing and Trading Interest Rate Derivatives.,True,False,False,False,attack68/book_irds3 +Autoencoder-Asset-Pricing-Models,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2025-08-17,140,https://github.com/RichardS0268/Autoencoder-Asset-Pricing-Models,"Reimplementation of Autoencoder Asset Pricing Models ([GKX, 2019](https://papers.ssrn.com/sol3/papers.cfm?abstract_id=3335536)).",True,False,False,False,RichardS0268/Autoencoder-Asset-Pricing-Models +Finance,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2025-05-12,3708,https://github.com/shashankvemuri/Finance,"150+ quantitative finance Python programs to help you gather, manipulate, and analyze stock market data.",True,False,False,False,shashankvemuri/Finance +101_formulaic_alphas,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2022-07-11,45,https://github.com/ram-ki/101_formulaic_alphas,Implementation of [101 formulaic alphas](https://arxiv.org/ftp/arxiv/papers/1601/1601.00991.pdf) using qstrader.,True,False,False,False,ram-ki/101_formulaic_alphas +Tidy Finance,"Reproducing Works, Training & Books",,,reproducing-works-training-books,,0,https://www.tidy-finance.org/,"An opinionated approach to empirical research in financial economics - a fully transparent, open-source code base in multiple programming languages (Python and R) to enable the reproducible implementation of financial research projects for students and practitioners.",False,False,False,False, +RoughVolatilityWorkshop,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2025-09-06,71,https://github.com/jgatheral/RoughVolatilityWorkshop,2024 QuantMind's Rough Volatility Workshop lectures.,True,False,False,False,jgatheral/RoughVolatilityWorkshop +AFML,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2024-09-05,810,https://github.com/boyboi86/AFML,All the answers for exercises from Advances in Financial Machine Learning by Dr Marco Lopez de Parodo.,True,False,False,False,boyboi86/AFML +AlgoTradingLib,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2026-02-10,28,https://github.com/usdaud/algotradinglib.github.io,"A catalog of algorithmic trading libraries, frameworks, strategies, and educational materials.",True,False,False,False,usdaud/algotradinglib.github.io +Portfolio Optimization Book,"Reproducing Works, Training & Books",,,reproducing-works-training-books,2025-02-17,25,https://portfoliooptimizationbook.com/,Prof. Daniel Palomar's Portfolio Optimization Book. [GitHub](https://github.com/dppalomar/pob),True,False,False,False,dppalomar/pob +Chartscout,Commercial & Proprietary Services,,,commercial-proprietary-services,,0,https://chartscout.io,Real-time cryptocurrency chart pattern detection with automated alerts across multiple exchanges.,False,False,False,True, +DayTradingBench,Commercial & Proprietary Services,,,commercial-proprietary-services,,0,https://daytradingbench.com,Live autonomous benchmark that evaluates LLM trading performance on DAX and Nasdaq indices using identical strategies and real-time market data. API access available.,False,False,False,True, +CoinTester,Commercial & Proprietary Services,,,commercial-proprietary-services,,0,https://cointester.io,"No-code crypto backtesting platform with 100+ indicators, AI sentiment signals, and 5+ years of historical data across 1,000+ trading pairs.",False,False,False,True, +goMacro.ai,Commercial & Proprietary Services,,,commercial-proprietary-services,,0,https://gomacro.ai,"AI-powered economic calendar with institutional-grade insights, bull/bear/base case scenario planning for NFP, CPI, PPI and other macro data releases.",False,False,False,True, +StockAInsights,Commercial & Proprietary Services,,,commercial-proprietary-services,,0,https://stockainsights.com,"AI-extracted financial statements API covering SEC filings including foreign filers (20-F, 6-K, 40-F), normalized quarterly and annual data from 2014+.",False,False,False,True, +brapi.dev,Commercial & Proprietary Services,,,commercial-proprietary-services,,0,https://brapi.dev/,"Brazilian stock market data API for B3/Bovespa quotes, historical OHLCV, dividends, and fundamentals.",False,False,False,True, +13F Insight,Commercial & Proprietary Services,,,commercial-proprietary-services,,0,https://13finsight.com/,"Track institutional investor 13F holdings with AI-powered analysis, position change alerts, and filing summaries.",False,False,False,True, +Earnings Feed,Commercial & Proprietary Services,,,commercial-proprietary-services,,0,https://earningsfeed.com/api,"Real-time SEC filings, insider trades, and institutional holdings API.",False,False,False,True, +Financial Data,Commercial & Proprietary Services,,,commercial-proprietary-services,,0,https://financialdata.net/,Stock Market and Financial Data API.,False,False,False,True, +Frostbyte,Commercial & Proprietary Services,,,commercial-proprietary-services,,0,https://agent-gateway-kappa.vercel.app,"Real-time crypto prices for 500+ tokens via REST API with free tier, DeFi swap routing and portfolio tracking.",False,False,False,True, +SaxoOpenAPI,Commercial & Proprietary Services,,,commercial-proprietary-services,,0,https://www.developer.saxo/,Saxo Bank financial data API.,False,False,False,True, +RTPR,Commercial & Proprietary Services,,,commercial-proprietary-services,,0,https://rtpr.io,"Real-time press release API delivering news from Business Wire, PR Newswire, and GlobeNewswire with sub-500ms latency. REST and WebSocket APIs for financial applications. Python and Node.js SDKs available.",False,False,False,True, +Nasdaq Data Link,Commercial & Proprietary Services,,,commercial-proprietary-services,,0,https://data.nasdaq.com/tools/full-list,"Financial data API with support for R, Python, Excel, Ruby, and many other languages (formerly Quandl).",False,False,False,True, +Parsec,Commercial & Proprietary Services,,,commercial-proprietary-services,,0,https://parsecfinance.com,Prediction market API with Python SDK for normalized data and execution across 5 prediction market exchanges. Free tier: 10K requests/month.,False,False,False,True, +Portfolio Optimizer,Commercial & Proprietary Services,,,commercial-proprietary-services,,0,https://portfoliooptimizer.io/,Portfolio Optimizer is a Web API for portfolio analysis and optimization.,False,False,False,True, +Reddit WallstreetBets API,Commercial & Proprietary Services,,,commercial-proprietary-services,,0,https://dashboard.nbshare.io/apps/reddit/api/,Provides daily top 50 stocks from reddit (subreddit) Wallstreetbets and their sentiments via the API.,False,False,False,True, +System R,Commercial & Proprietary Services,,,commercial-proprietary-services,,0,https://agents.systemr.ai,"AI-native risk intelligence API for trading agents. Position sizing, risk validation, and system health in one call.",False,False,False,True, +Telonex,Commercial & Proprietary Services,,,commercial-proprietary-services,,0,https://telonex.io,"Tick-level prediction market data (trades, quotes, orderbooks, on-chain fills) via REST API and Python SDK.",False,False,False,True, +ValueRay,Commercial & Proprietary Services,,,commercial-proprietary-services,,0,https://www.valueray.com/api,"Technical, quantitative and sentiment data for stocks and ETFs with risk metrics, peer percentiles and market regime signals. Optimized for AI/LLM agents.",False,False,False,True, +VertData,Commercial & Proprietary Services,,,commercial-proprietary-services,,0,https://vertdata.com,"Institutional-grade financial intelligence platform. Track 43K+ congressional trades (STOCK Act), SEC insider Form 4 filings, 25 superinvestor 13F portfolios, CFTC futures positioning, ARK ETF holdings, and short interest — all scored by AI for signal strength.",False,False,False,True, +KeepRule,Commercial & Proprietary Services,,,commercial-proprietary-services,,0,https://keeprule.com/,"Curated library of decision-making principles and investment wisdom from masters like Buffett and Munger, featuring mental models for better investment thinking.",False,False,False,True, +ML-Quant,Commercial & Proprietary Services,,,commercial-proprietary-services,,0,https://www.ml-quant.com/,"Top Quant resources like ArXiv (sanity), SSRN, RePec, Journals, Podcasts, Videos, and Blogs.",False,False,False,True, +awesome-sec-filings,Related Lists,,,related-lists,2026-02-14,9,https://github.com/vibeyclaw/awesome-sec-filings,"A curated list of tools, data sources, libraries, and resources for working with SEC filings (13F, 10-K, 10-Q, 8-K).",True,False,False,False,vibeyclaw/awesome-sec-filings +CONVEXFI,Related Lists,,,related-lists,,0,https://github.com/convexfi,Official GitHub organization for the convex research group at the Hong Kong University of Science and Technology (HKUST).,True,False,False,False, diff --git a/site/projects.qmd b/site/projects.qmd deleted file mode 100644 index 51197ff..0000000 --- a/site/projects.qmd +++ /dev/null @@ -1,27 +0,0 @@ ---- -title: "Projects" -format: - html: - df-print: kable -include-in-header: - - text: | - ---- - -Compilation of projects providing access to the date of last commit or publication date. - -```{r message=FALSE, warning=FALSE, echo=FALSE, table.cap="Projects"} -#| label: tbl-projects -#| tbl-cap: Projects -#| results: asis - -df <- read.csv("projects.csv") -df$last_commit <- as.Date(df$last_commit) -df <- df[!is.na(df$last_commit),] -df$project <- paste0("", df$project, "") -df <- df[,c("project", "section", "last_commit")] -df <- df[order(df$last_commit, decreasing = TRUE),] -rownames(df) <- NULL -htmltools::tagList(DT::datatable(df, list(pageLength = 50), escape = FALSE)) -``` diff --git a/site/static/main.js b/site/static/main.js new file mode 100644 index 0000000..d2018a1 --- /dev/null +++ b/site/static/main.js @@ -0,0 +1,318 @@ +/* awesome-quant – search, filter, sort, expand */ +(function () { + "use strict"; + + const $ = (sel, ctx = document) => ctx.querySelector(sel); + const $$ = (sel, ctx = document) => [...ctx.querySelectorAll(sel)]; + + const searchInput = $("#search"); + const filterBar = $("#filter-bar"); + const filterValue = $("#filter-value"); + const filterClear = $("#filter-clear"); + const noResults = $("#no-results"); + const resultsCount = $("#results-count"); + const tableBody = $("tbody", $("#project-table")); + const sortHeaders = $$("th[data-sort]"); + + let activeFilter = { type: "", value: "" }; + let currentSort = { key: "", dir: "" }; + + // ===== Theme ===== + const themeToggle = $(".theme-toggle"); + + function getPreferredTheme() { + const stored = localStorage.getItem("theme"); + if (stored) return stored; + return window.matchMedia("(prefers-color-scheme: dark)").matches + ? "dark" + : "light"; + } + + function applyTheme(theme) { + document.documentElement.setAttribute("data-theme", theme); + localStorage.setItem("theme", theme); + } + + applyTheme(getPreferredTheme()); + + themeToggle.addEventListener("click", () => { + const current = document.documentElement.getAttribute("data-theme"); + applyTheme(current === "dark" ? "light" : "dark"); + }); + + // ===== Helpers ===== + function getRows() { + return $$(".row", tableBody); + } + + function getExpandRow(row) { + return row.nextElementSibling; + } + + function collapseAll() { + for (const row of getRows()) { + row.classList.remove("expanded"); + const expand = getExpandRow(row); + if (expand) expand.hidden = true; + } + } + + // ===== Search & Filter ===== + let searchTimeout; + + function applyFilters() { + const query = searchInput.value.trim().toLowerCase(); + let visible = 0; + + collapseAll(); + + for (const row of getRows()) { + const expand = getExpandRow(row); + const text = ( + row.textContent + + " " + + (expand ? expand.textContent : "") + ).toLowerCase(); + const language = row.dataset.language || ""; + const category = row.dataset.category || ""; + const sources = row.dataset.sources || ""; + + let show = true; + + // Search + if (query && !text.includes(query)) show = false; + + // Tag filter + if (show && activeFilter.value) { + const ft = activeFilter.type; + const fv = activeFilter.value; + if (ft === "language" && language !== fv) show = false; + if (ft === "category" && category !== fv) show = false; + if (ft === "source" && !sources.split(" ").includes(fv)) show = false; + } + + row.hidden = !show; + if (expand) expand.hidden = true; + + if (show) { + visible++; + const numCell = $(".col-num", row); + if (numCell) numCell.textContent = visible; + } + } + + noResults.hidden = visible > 0; + resultsCount.textContent = + query || activeFilter.value + ? `Showing ${visible} project${visible !== 1 ? "s" : ""}` + : ""; + + // Sync filter bar + if (activeFilter.value) { + filterValue.textContent = activeFilter.value; + filterBar.style.display = "flex"; + } else { + filterBar.style.display = "none"; + } + + syncURL(); + } + + searchInput.addEventListener("input", () => { + clearTimeout(searchTimeout); + searchTimeout = setTimeout(applyFilters, 120); + }); + + filterClear.addEventListener("click", () => { + activeFilter = { type: "", value: "" }; + applyFilters(); + }); + + // ===== Tag Click ===== + tableBody.addEventListener("click", (e) => { + const tag = e.target.closest(".tag"); + if (tag) { + e.stopPropagation(); + const type = tag.dataset.filterType; + const value = tag.dataset.filterValue; + + // Toggle off if same filter + if (activeFilter.type === type && activeFilter.value === value) { + activeFilter = { type: "", value: "" }; + } else { + activeFilter = { type, value }; + } + applyFilters(); + return; + } + }); + + // ===== Row Expand ===== + tableBody.addEventListener("click", (e) => { + if (e.target.closest(".tag") || e.target.closest("a")) return; + const row = e.target.closest(".row"); + if (!row) return; + + const expand = getExpandRow(row); + if (!expand) return; + + const isExpanded = row.classList.contains("expanded"); + + for (const r of getRows()) { + if (r !== row) { + r.classList.remove("expanded"); + const ex = getExpandRow(r); + if (ex) ex.hidden = true; + } + } + + if (isExpanded) { + row.classList.remove("expanded"); + expand.hidden = true; + } else { + row.classList.add("expanded"); + expand.hidden = false; + } + }); + + tableBody.addEventListener("keydown", (e) => { + if (e.key === "Enter" || e.key === " ") { + const row = e.target.closest(".row"); + if (row) { + e.preventDefault(); + row.click(); + } + } + }); + + // ===== Sort ===== + function getSortValue(row, key) { + if (key === "name") { + return ($(".col-name a", row)?.textContent || "").toLowerCase(); + } + if (key === "stars") { + return parseInt(row.dataset.stars || "0", 10); + } + if (key === "update") { + return ($(".last-update", row)?.textContent || "").trim(); + } + return ""; + } + + function doSort(key, dir) { + const rows = getRows(); + const pairs = rows.map((r) => [r, getExpandRow(r)]); + + if (!dir) { + pairs.sort((a, b) => { + const ai = parseInt(a[0].dataset.originalIndex || "0"); + const bi = parseInt(b[0].dataset.originalIndex || "0"); + return ai - bi; + }); + } else { + pairs.sort((a, b) => { + const va = getSortValue(a[0], key); + const vb = getSortValue(b[0], key); + let cmp; + if (typeof va === "number" && typeof vb === "number") { + cmp = va - vb; + } else { + cmp = String(va).localeCompare(String(vb)); + } + return dir === "asc" ? cmp : -cmp; + }); + } + + for (const [row, expand] of pairs) { + tableBody.appendChild(row); + if (expand) tableBody.appendChild(expand); + } + + applyFilters(); + } + + for (const th of sortHeaders) { + th.addEventListener("click", () => { + const key = th.dataset.sort; + + let nextDir; + if (currentSort.key !== key) { + nextDir = key === "name" ? "asc" : "desc"; + } else if (currentSort.dir === "asc") { + nextDir = "desc"; + } else if (currentSort.dir === "desc") { + nextDir = key === "name" ? "" : "asc"; + } else { + nextDir = key === "name" ? "asc" : "desc"; + } + + for (const h of sortHeaders) { + h.classList.remove("asc", "desc"); + } + + if (nextDir) { + th.classList.add(nextDir); + } + + currentSort = { key: nextDir ? key : "", dir: nextDir }; + doSort(key, nextDir); + }); + } + + // Store original indices + getRows().forEach((r, i) => (r.dataset.originalIndex = i)); + + // ===== Keyboard Shortcuts ===== + document.addEventListener("keydown", (e) => { + if (e.key === "/" && !e.ctrlKey && !e.metaKey) { + const active = document.activeElement; + if ( + active && + (active.tagName === "INPUT" || + active.tagName === "SELECT" || + active.tagName === "TEXTAREA") + ) + return; + e.preventDefault(); + searchInput.focus(); + } + + if (e.key === "Escape") { + if (document.activeElement === searchInput) { + if (searchInput.value) { + searchInput.value = ""; + applyFilters(); + } else { + searchInput.blur(); + } + } + } + }); + + // ===== URL State ===== + function syncURL() { + const params = new URLSearchParams(); + if (searchInput.value) params.set("q", searchInput.value); + if (activeFilter.value) { + params.set("filter_type", activeFilter.type); + params.set("filter", activeFilter.value); + } + const qs = params.toString(); + const url = qs ? `?${qs}` : location.pathname; + history.replaceState(null, "", url); + } + + function restoreURL() { + const params = new URLSearchParams(location.search); + if (params.has("q")) searchInput.value = params.get("q"); + if (params.has("filter")) { + activeFilter = { + type: params.get("filter_type") || "category", + value: params.get("filter"), + }; + } + if (params.toString()) applyFilters(); + } + + restoreURL(); +})(); diff --git a/site/static/style.css b/site/static/style.css new file mode 100644 index 0000000..3f3e1b3 --- /dev/null +++ b/site/static/style.css @@ -0,0 +1,860 @@ +/* ===== Reset & Base ===== */ +*, +*::before, +*::after { + box-sizing: border-box; + margin: 0; + padding: 0; +} + +:root { + --font: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif; + --shell-max: 72rem; + --radius: 8px; + --radius-pill: 999px; + --transition: 0.2s ease; + + /* Light mode (default) */ + --bg-page: #ffffff; + --bg-surface: #f8fafc; + --bg-surface-hover: #f1f5f9; + --bg-hero: #0f172a; + --bg-hero-accent: #1e293b; + --ink: #0f172a; + --ink-secondary: #475569; + --ink-tertiary: #94a3b8; + --ink-hero: #f1f5f9; + --ink-hero-secondary: #94a3b8; + --border: #e2e8f0; + --border-light: #f1f5f9; + --accent: #2563eb; + --accent-hover: #1d4ed8; + --accent-subtle: #eff6ff; + --tag-group-bg: #f0f9ff; + --tag-group-ink: #0369a1; + --tag-group-border: #bae6fd; + --tag-cat-bg: #f5f3ff; + --tag-cat-ink: #6d28d9; + --tag-cat-border: #ddd6fe; + --badge-bg: #fef3c7; + --badge-ink: #92400e; + --expand-bg: #f8fafc; + --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.05); + --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.07), 0 2px 4px -2px rgba(0, 0, 0, 0.05); +} + +[data-theme="dark"] { + --bg-page: #0f172a; + --bg-surface: #1e293b; + --bg-surface-hover: #334155; + --bg-hero: #020617; + --bg-hero-accent: #0f172a; + --ink: #f1f5f9; + --ink-secondary: #94a3b8; + --ink-tertiary: #64748b; + --border: #334155; + --border-light: #1e293b; + --accent: #60a5fa; + --accent-hover: #93c5fd; + --accent-subtle: rgba(96, 165, 250, 0.1); + --tag-group-bg: rgba(14, 165, 233, 0.12); + --tag-group-ink: #7dd3fc; + --tag-group-border: rgba(14, 165, 233, 0.25); + --tag-cat-bg: rgba(139, 92, 246, 0.12); + --tag-cat-ink: #c4b5fd; + --tag-cat-border: rgba(139, 92, 246, 0.25); + --badge-bg: rgba(251, 191, 36, 0.15); + --badge-ink: #fcd34d; + --expand-bg: #1e293b; + --shadow-sm: 0 1px 2px rgba(0, 0, 0, 0.3); + --shadow-md: 0 4px 6px -1px rgba(0, 0, 0, 0.4), 0 2px 4px -2px rgba(0, 0, 0, 0.3); +} + +html { + scroll-behavior: smooth; +} + +body { + font-family: var(--font); + font-size: 15px; + line-height: 1.6; + color: var(--ink); + background: var(--bg-page); + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +a { + color: var(--accent); + text-decoration: none; + transition: color var(--transition); +} + +a:hover { + color: var(--accent-hover); +} + +button { + font-family: inherit; + cursor: pointer; + border: none; + background: none; +} + +.sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip: rect(0, 0, 0, 0); + border: 0; +} + +.shell { + max-width: var(--shell-max); + margin: 0 auto; + padding: 0 1.5rem; +} + +/* ===== Hero ===== */ +.hero { + background: var(--bg-hero); + color: var(--ink-hero); + min-height: 80vh; + display: flex; + align-items: center; + position: relative; + overflow: hidden; +} + +.hero::before { + content: ""; + position: absolute; + inset: 0; + background: + radial-gradient(ellipse 80% 60% at 50% 40%, rgba(37, 99, 235, 0.12) 0%, transparent 70%), + radial-gradient(ellipse 50% 80% at 80% 60%, rgba(99, 102, 241, 0.08) 0%, transparent 60%); + pointer-events: none; +} + +.hero::after { + content: ""; + position: absolute; + inset: 0; + background-image: url("data:image/svg+xml,%3Csvg width='40' height='40' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0 0h40v40H0z' fill='none'/%3E%3Cpath d='M0 40L40 0' stroke='%23ffffff' stroke-opacity='0.03' stroke-width='1'/%3E%3C/svg%3E"); + pointer-events: none; +} + +.hero-inner { + width: 100%; + max-width: var(--shell-max); + margin: 0 auto; + padding: 2rem 1.5rem; + position: relative; + z-index: 1; +} + +.nav { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 4rem; +} + +.nav-brand { + font-weight: 700; + font-size: 1rem; + letter-spacing: -0.01em; + opacity: 0.7; +} + +.nav-links { + display: flex; + align-items: center; + gap: 1.25rem; +} + +.nav-links a { + color: var(--ink-hero-secondary); + font-size: 0.875rem; + font-weight: 500; + transition: color var(--transition); +} + +.nav-links a:hover { + color: var(--ink-hero); +} + +.nav-submit { + background: var(--accent); + color: #fff !important; + padding: 0.375rem 0.875rem; + border-radius: var(--radius-pill); + font-size: 0.8125rem; + font-weight: 600; + transition: background var(--transition), opacity var(--transition); +} + +.nav-submit:hover { + background: var(--accent-hover); + color: #fff !important; +} + +.theme-toggle { + color: var(--ink-hero-secondary); + padding: 0.375rem; + border-radius: var(--radius); + transition: color var(--transition), background var(--transition); + display: flex; + align-items: center; +} + +.theme-toggle:hover { + color: var(--ink-hero); + background: rgba(255, 255, 255, 0.08); +} + +.icon-moon { display: none; } +[data-theme="dark"] .icon-sun { display: none; } +[data-theme="dark"] .icon-moon { display: block; } + +.hero-content { + max-width: 40rem; +} + +.hero-content h1 { + font-size: clamp(2.75rem, 6vw, 4.5rem); + font-weight: 700; + line-height: 1.05; + letter-spacing: -0.03em; + margin-bottom: 1rem; +} + +.hero-subtitle { + font-size: clamp(1.05rem, 2vw, 1.25rem); + color: var(--ink-hero-secondary); + line-height: 1.5; + margin-bottom: 0.5rem; +} + +.hero-maintained { + font-size: 0.9rem; + color: var(--ink-hero-secondary); + opacity: 0.7; + margin-bottom: 2rem; +} + +.hero-maintained a { + color: var(--ink-hero); + font-weight: 500; + opacity: 1; +} + +.hero-maintained a:hover { + color: var(--accent); +} + +.hero-stats { + display: flex; + align-items: center; + gap: 1rem; + margin-bottom: 2.5rem; + font-size: 0.9rem; + color: var(--ink-hero-secondary); +} + +.hero-stats strong { + color: var(--ink-hero); + font-weight: 600; +} + +.stat-sep { + width: 4px; + height: 4px; + border-radius: 50%; + background: var(--ink-hero-secondary); + opacity: 0.4; +} + +.hero-cta { + display: inline-flex; + align-items: center; + gap: 0.5rem; + padding: 0.75rem 1.75rem; + background: var(--accent); + color: #fff; + font-weight: 600; + font-size: 0.9rem; + border-radius: var(--radius-pill); + transition: background var(--transition), transform var(--transition); +} + +.hero-cta:hover { + background: var(--accent-hover); + color: #fff; + transform: translateY(-1px); +} + +/* ===== Controls ===== */ +.list-section { + padding: 3rem 0 2rem; +} + +.controls { + display: flex; + gap: 0.75rem; + margin-bottom: 1rem; + flex-wrap: wrap; +} + +.search-wrap { + flex: 1; + min-width: 240px; + position: relative; +} + +.search-icon { + position: absolute; + left: 0.875rem; + top: 50%; + transform: translateY(-50%); + color: var(--ink-tertiary); + pointer-events: none; +} + +.search-input { + width: 100%; + padding: 0.625rem 2.5rem 0.625rem 2.5rem; + font-family: var(--font); + font-size: 0.9rem; + border: 1px solid var(--border); + border-radius: var(--radius-pill); + background: var(--bg-surface); + color: var(--ink); + outline: none; + transition: border-color var(--transition), box-shadow var(--transition); +} + +.search-input:focus { + border-color: var(--accent); + box-shadow: 0 0 0 3px var(--accent-subtle); +} + +.search-input::placeholder { + color: var(--ink-tertiary); +} + +.search-kbd { + position: absolute; + right: 0.75rem; + top: 50%; + transform: translateY(-50%); + font-family: var(--font); + font-size: 0.7rem; + font-weight: 500; + color: var(--ink-tertiary); + background: var(--bg-page); + border: 1px solid var(--border); + border-radius: 4px; + padding: 0.1rem 0.4rem; + line-height: 1.4; + pointer-events: none; +} + +.filter-controls select { + padding: 0.625rem 2rem 0.625rem 0.875rem; + font-family: var(--font); + font-size: 0.875rem; + border: 1px solid var(--border); + border-radius: var(--radius-pill); + background: var(--bg-surface); + color: var(--ink); + appearance: none; + background-image: url("data:image/svg+xml,%3Csvg width='10' height='6' viewBox='0 0 10 6' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%2394a3b8' fill='none' stroke-width='1.5' stroke-linecap='round'/%3E%3C/svg%3E"); + background-repeat: no-repeat; + background-position: right 0.75rem center; + cursor: pointer; + outline: none; + transition: border-color var(--transition); +} + +.filter-controls select:focus { + border-color: var(--accent); +} + +/* ===== Filter Bar ===== */ +.filter-bar { + display: flex; + align-items: center; + gap: 0.5rem; + padding: 0.5rem 1rem; + background: var(--accent-subtle); + border: 1px solid var(--border); + border-radius: var(--radius); + margin-bottom: 1rem; + font-size: 0.85rem; +} + +.filter-label { + color: var(--ink-secondary); +} + +.filter-value { + font-weight: 600; + color: var(--accent); +} + +.filter-clear { + margin-left: auto; + font-size: 0.8rem; + font-weight: 500; + color: var(--ink-secondary); + padding: 0.2rem 0.6rem; + border-radius: var(--radius-pill); + transition: background var(--transition), color var(--transition); +} + +.filter-clear:hover { + background: var(--bg-surface-hover); + color: var(--ink); +} + +/* ===== Table ===== */ +.table-wrap { + border: 1px solid var(--border); + border-radius: var(--radius); + overflow: hidden; +} + +.table { + width: 100%; + border-collapse: collapse; + table-layout: fixed; +} + +.table thead { + position: sticky; + top: 0; + z-index: 10; +} + +.table th { + background: var(--bg-surface); + color: var(--ink-secondary); + font-size: 0.75rem; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.05em; + padding: 0.75rem 1rem; + text-align: left; + border-bottom: 1px solid var(--border); + white-space: nowrap; + user-select: none; +} + +.table th[data-sort] { + cursor: pointer; + transition: color var(--transition); +} + +.table th[data-sort]:hover { + color: var(--accent); +} + +.sort-arrow::after { + content: ""; + margin-left: 0.25rem; +} + +.table th[data-sort].asc .sort-arrow::after { + content: " \2191"; +} + +.table th[data-sort].desc .sort-arrow::after { + content: " \2193"; +} + +.table td { + padding: 0.625rem 1rem; + border-bottom: 1px solid var(--border-light); + vertical-align: middle; + font-size: 0.875rem; +} + +/* Column widths */ +.col-num { + width: 3rem; + text-align: center; + color: var(--ink-tertiary); + font-size: 0.8rem; + font-variant-numeric: tabular-nums; +} + +.col-name { + width: auto; +} + +.col-name a { + font-weight: 600; + color: var(--ink); + transition: color var(--transition); +} + +.col-name a:hover { + color: var(--accent); +} + +.mobile-category { + display: none; +} + +.col-stars { + width: 6rem; + text-align: right; + font-variant-numeric: tabular-nums; + white-space: nowrap; +} + +.stars { + display: inline-flex; + align-items: center; + gap: 0.25rem; + font-size: 0.8rem; + font-weight: 500; + color: var(--ink-secondary); +} + +.stars svg { + color: #eab308; +} + +[data-theme="dark"] .stars svg { + color: #facc15; +} + +.col-update { + width: 7.5rem; + white-space: nowrap; +} + +.last-update { + font-size: 0.8rem; + color: var(--ink-tertiary); + font-variant-numeric: tabular-nums; +} + +.col-tags { + width: auto; +} + +.col-arrow { + width: 2.5rem; + text-align: center; +} + +.arrow { + color: var(--ink-tertiary); + font-size: 1.1rem; + transition: transform var(--transition); + display: inline-block; +} + +/* Row interaction */ +.row { + cursor: pointer; + transition: background var(--transition); +} + +.row:hover { + background: var(--bg-surface-hover); +} + +.row.expanded .arrow { + transform: rotate(90deg); +} + +/* Expand row */ +.expand-row td { + padding: 0; + border-bottom: 1px solid var(--border); +} + +.expand-content { + padding: 1rem 1rem 1rem 4rem; + background: var(--expand-bg); + animation: expand-in 0.15s ease; +} + +@keyframes expand-in { + from { + opacity: 0; + transform: translateY(-4px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +.expand-desc { + color: var(--ink-secondary); + font-size: 0.875rem; + line-height: 1.6; + margin-bottom: 0.5rem; +} + +.expand-links { + display: flex; + flex-wrap: wrap; + gap: 1rem; + font-size: 0.8rem; +} + +.expand-links a { + color: var(--ink-tertiary); + transition: color var(--transition); +} + +.expand-links a:hover { + color: var(--accent); +} + +/* Tags */ +.tag { + display: inline-block; + font-size: 0.7rem; + font-weight: 500; + padding: 0.15rem 0.6rem; + border-radius: var(--radius-pill); + margin: 0.125rem 0.125rem; + transition: opacity var(--transition), transform var(--transition); + line-height: 1.6; +} + +.tag:hover { + opacity: 0.8; + transform: scale(1.03); +} + +.tag-lang { + background: var(--tag-group-bg); + color: var(--tag-group-ink); + border: 1px solid var(--tag-group-border); +} + +.tag-section { + background: var(--tag-cat-bg); + color: var(--tag-cat-ink); + border: 1px solid var(--tag-cat-border); +} + +.tag-source { + font-size: 0.65rem; + font-weight: 600; + text-transform: uppercase; + letter-spacing: 0.03em; +} + +.tag-github { + background: rgba(36, 41, 47, 0.08); + color: #24292f; + border: 1px solid rgba(36, 41, 47, 0.2); +} + +[data-theme="dark"] .tag-github { + background: rgba(255, 255, 255, 0.08); + color: #e6edf3; + border: 1px solid rgba(255, 255, 255, 0.15); +} + +.tag-cran { + background: rgba(39, 109, 195, 0.08); + color: #276dc3; + border: 1px solid rgba(39, 109, 195, 0.25); +} + +[data-theme="dark"] .tag-cran { + background: rgba(75, 143, 219, 0.12); + color: #6aaef0; + border: 1px solid rgba(75, 143, 219, 0.25); +} + +.tag-pypi { + background: rgba(0, 110, 165, 0.08); + color: #006ea5; + border: 1px solid rgba(0, 110, 165, 0.25); +} + +[data-theme="dark"] .tag-pypi { + background: rgba(0, 150, 214, 0.12); + color: #41b6e6; + border: 1px solid rgba(0, 150, 214, 0.25); +} + +.tag-commercial { + background: var(--badge-bg); + color: var(--badge-ink); + border: 1px solid rgba(146, 64, 14, 0.2); +} + +[data-theme="dark"] .tag-commercial { + border-color: rgba(252, 211, 77, 0.25); +} + +/* ===== Results ===== */ +.no-results { + text-align: center; + padding: 3rem 1rem; + color: var(--ink-tertiary); + font-size: 0.95rem; +} + +.results-count { + padding: 0.75rem 0; + font-size: 0.8rem; + color: var(--ink-tertiary); + text-align: right; +} + +/* ===== CTA Section ===== */ +.cta-section { + text-align: center; + padding: 4rem 0; + border-top: 1px solid var(--border); +} + +.cta-section h2 { + font-size: 1.5rem; + font-weight: 700; + letter-spacing: -0.02em; + margin-bottom: 0.5rem; +} + +.cta-section p { + color: var(--ink-secondary); + margin-bottom: 1.5rem; +} + +.btn { + display: inline-flex; + align-items: center; + padding: 0.625rem 1.5rem; + background: var(--accent); + color: #fff; + font-weight: 600; + font-size: 0.875rem; + border-radius: var(--radius-pill); + transition: background var(--transition), transform var(--transition); +} + +.btn:hover { + background: var(--accent-hover); + color: #fff; + transform: translateY(-1px); +} + +/* ===== Footer ===== */ +.footer { + padding: 2rem 0; + border-top: 1px solid var(--border); + font-size: 0.8rem; + color: var(--ink-tertiary); +} + +.footer .shell { + display: flex; + align-items: center; + justify-content: center; + gap: 0.75rem; + flex-wrap: wrap; +} + +.footer a { + color: var(--ink-secondary); +} + +.footer a:hover { + color: var(--accent); +} + +.footer-sep { + opacity: 0.3; +} + +/* ===== Responsive ===== */ +@media (max-width: 1100px) { + .col-update { + display: none; + } +} + +@media (max-width: 960px) { + .tag-section { + display: none; + } + + .tag-source { + display: none; + } +} + +@media (max-width: 680px) { + .hero { + min-height: auto; + padding: 2rem 0; + } + + .nav { + margin-bottom: 2.5rem; + } + + .hero-content h1 { + font-size: 2.25rem; + } + + .hero-stats { + flex-wrap: wrap; + gap: 0.5rem 1rem; + } + + .col-num { + display: none; + } + + .col-stars { + display: none; + } + + .col-tags { + display: none; + } + + .mobile-category { + display: block; + font-size: 0.75rem; + color: var(--ink-tertiary); + font-weight: 400; + margin-top: 0.125rem; + } + + .expand-content { + padding: 0.75rem 1rem; + } + + .controls { + flex-direction: column; + } + + .search-wrap { + min-width: auto; + } +} + +@media (prefers-reduced-motion: reduce) { + * { + animation-duration: 0.01ms !important; + transition-duration: 0.01ms !important; + } +} diff --git a/uv.lock b/uv.lock new file mode 100644 index 0000000..1a1c855 --- /dev/null +++ b/uv.lock @@ -0,0 +1,670 @@ +version = 1 +revision = 3 +requires-python = ">=3.11" +resolution-markers = [ + "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.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'", +] + +[[package]] +name = "awesome-quant" +version = "0.1.0" +source = { virtual = "." } +dependencies = [ + { name = "mypy" }, + { name = "pandas" }, + { name = "pygithub" }, +] + +[package.metadata] +requires-dist = [ + { name = "mypy", specifier = ">=1.14.0" }, + { name = "pandas", specifier = ">=2.2.0" }, + { name = "pygithub", specifier = ">=2.2.0" }, +] + +[[package]] +name = "certifi" +version = "2026.2.25" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/af/2d/7bf41579a8986e348fa033a31cdd0e4121114f6bce2457e8876010b092dd/certifi-2026.2.25.tar.gz", hash = "sha256:e887ab5cee78ea814d3472169153c2d12cd43b14bd03329a39a9c6e2e80bfba7", size = 155029, upload-time = "2026-02-25T02:54:17.342Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl", hash = "sha256:027692e4402ad994f1c42e52a4997a9763c646b73e4096e4d5d6db8af1d6f0fa", size = 153684, upload-time = "2026-02-25T02:54:15.766Z" }, +] + +[[package]] +name = "cffi" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pycparser", marker = "implementation_name != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/eb/56/b1ba7935a17738ae8453301356628e8147c79dbb825bcbc73dc7401f9846/cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529", size = 523588, upload-time = "2025-09-08T23:24:04.541Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/12/4a/3dfd5f7850cbf0d06dc84ba9aa00db766b52ca38d8b86e3a38314d52498c/cffi-2.0.0-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe", size = 184344, upload-time = "2025-09-08T23:22:26.456Z" }, + { url = "https://files.pythonhosted.org/packages/4f/8b/f0e4c441227ba756aafbe78f117485b25bb26b1c059d01f137fa6d14896b/cffi-2.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c", size = 180560, upload-time = "2025-09-08T23:22:28.197Z" }, + { url = "https://files.pythonhosted.org/packages/b1/b7/1200d354378ef52ec227395d95c2576330fd22a869f7a70e88e1447eb234/cffi-2.0.0-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92", size = 209613, upload-time = "2025-09-08T23:22:29.475Z" }, + { url = "https://files.pythonhosted.org/packages/b8/56/6033f5e86e8cc9bb629f0077ba71679508bdf54a9a5e112a3c0b91870332/cffi-2.0.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93", size = 216476, upload-time = "2025-09-08T23:22:31.063Z" }, + { url = "https://files.pythonhosted.org/packages/dc/7f/55fecd70f7ece178db2f26128ec41430d8720f2d12ca97bf8f0a628207d5/cffi-2.0.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5", size = 203374, upload-time = "2025-09-08T23:22:32.507Z" }, + { url = "https://files.pythonhosted.org/packages/84/ef/a7b77c8bdc0f77adc3b46888f1ad54be8f3b7821697a7b89126e829e676a/cffi-2.0.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664", size = 202597, upload-time = "2025-09-08T23:22:34.132Z" }, + { url = "https://files.pythonhosted.org/packages/d7/91/500d892b2bf36529a75b77958edfcd5ad8e2ce4064ce2ecfeab2125d72d1/cffi-2.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26", size = 215574, upload-time = "2025-09-08T23:22:35.443Z" }, + { url = "https://files.pythonhosted.org/packages/44/64/58f6255b62b101093d5df22dcb752596066c7e89dd725e0afaed242a61be/cffi-2.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9", size = 218971, upload-time = "2025-09-08T23:22:36.805Z" }, + { url = "https://files.pythonhosted.org/packages/ab/49/fa72cebe2fd8a55fbe14956f9970fe8eb1ac59e5df042f603ef7c8ba0adc/cffi-2.0.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414", size = 211972, upload-time = "2025-09-08T23:22:38.436Z" }, + { url = "https://files.pythonhosted.org/packages/0b/28/dd0967a76aab36731b6ebfe64dec4e981aff7e0608f60c2d46b46982607d/cffi-2.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743", size = 217078, upload-time = "2025-09-08T23:22:39.776Z" }, + { url = "https://files.pythonhosted.org/packages/2b/c0/015b25184413d7ab0a410775fdb4a50fca20f5589b5dab1dbbfa3baad8ce/cffi-2.0.0-cp311-cp311-win32.whl", hash = "sha256:c649e3a33450ec82378822b3dad03cc228b8f5963c0c12fc3b1e0ab940f768a5", size = 172076, upload-time = "2025-09-08T23:22:40.95Z" }, + { url = "https://files.pythonhosted.org/packages/ae/8f/dc5531155e7070361eb1b7e4c1a9d896d0cb21c49f807a6c03fd63fc877e/cffi-2.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5", size = 182820, upload-time = "2025-09-08T23:22:42.463Z" }, + { url = "https://files.pythonhosted.org/packages/95/5c/1b493356429f9aecfd56bc171285a4c4ac8697f76e9bbbbb105e537853a1/cffi-2.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:c6638687455baf640e37344fe26d37c404db8b80d037c3d29f58fe8d1c3b194d", size = 177635, upload-time = "2025-09-08T23:22:43.623Z" }, + { url = "https://files.pythonhosted.org/packages/ea/47/4f61023ea636104d4f16ab488e268b93008c3d0bb76893b1b31db1f96802/cffi-2.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d", size = 185271, upload-time = "2025-09-08T23:22:44.795Z" }, + { url = "https://files.pythonhosted.org/packages/df/a2/781b623f57358e360d62cdd7a8c681f074a71d445418a776eef0aadb4ab4/cffi-2.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c", size = 181048, upload-time = "2025-09-08T23:22:45.938Z" }, + { url = "https://files.pythonhosted.org/packages/ff/df/a4f0fbd47331ceeba3d37c2e51e9dfc9722498becbeec2bd8bc856c9538a/cffi-2.0.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe", size = 212529, upload-time = "2025-09-08T23:22:47.349Z" }, + { url = "https://files.pythonhosted.org/packages/d5/72/12b5f8d3865bf0f87cf1404d8c374e7487dcf097a1c91c436e72e6badd83/cffi-2.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062", size = 220097, upload-time = "2025-09-08T23:22:48.677Z" }, + { url = "https://files.pythonhosted.org/packages/c2/95/7a135d52a50dfa7c882ab0ac17e8dc11cec9d55d2c18dda414c051c5e69e/cffi-2.0.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e", size = 207983, upload-time = "2025-09-08T23:22:50.06Z" }, + { url = "https://files.pythonhosted.org/packages/3a/c8/15cb9ada8895957ea171c62dc78ff3e99159ee7adb13c0123c001a2546c1/cffi-2.0.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037", size = 206519, upload-time = "2025-09-08T23:22:51.364Z" }, + { url = "https://files.pythonhosted.org/packages/78/2d/7fa73dfa841b5ac06c7b8855cfc18622132e365f5b81d02230333ff26e9e/cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba", size = 219572, upload-time = "2025-09-08T23:22:52.902Z" }, + { url = "https://files.pythonhosted.org/packages/07/e0/267e57e387b4ca276b90f0434ff88b2c2241ad72b16d31836adddfd6031b/cffi-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94", size = 222963, upload-time = "2025-09-08T23:22:54.518Z" }, + { url = "https://files.pythonhosted.org/packages/b6/75/1f2747525e06f53efbd878f4d03bac5b859cbc11c633d0fb81432d98a795/cffi-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187", size = 221361, upload-time = "2025-09-08T23:22:55.867Z" }, + { url = "https://files.pythonhosted.org/packages/7b/2b/2b6435f76bfeb6bbf055596976da087377ede68df465419d192acf00c437/cffi-2.0.0-cp312-cp312-win32.whl", hash = "sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18", size = 172932, upload-time = "2025-09-08T23:22:57.188Z" }, + { url = "https://files.pythonhosted.org/packages/f8/ed/13bd4418627013bec4ed6e54283b1959cf6db888048c7cf4b4c3b5b36002/cffi-2.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5", size = 183557, upload-time = "2025-09-08T23:22:58.351Z" }, + { url = "https://files.pythonhosted.org/packages/95/31/9f7f93ad2f8eff1dbc1c3656d7ca5bfd8fb52c9d786b4dcf19b2d02217fa/cffi-2.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6", size = 177762, upload-time = "2025-09-08T23:22:59.668Z" }, + { url = "https://files.pythonhosted.org/packages/4b/8d/a0a47a0c9e413a658623d014e91e74a50cdd2c423f7ccfd44086ef767f90/cffi-2.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb", size = 185230, upload-time = "2025-09-08T23:23:00.879Z" }, + { url = "https://files.pythonhosted.org/packages/4a/d2/a6c0296814556c68ee32009d9c2ad4f85f2707cdecfd7727951ec228005d/cffi-2.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca", size = 181043, upload-time = "2025-09-08T23:23:02.231Z" }, + { url = "https://files.pythonhosted.org/packages/b0/1e/d22cc63332bd59b06481ceaac49d6c507598642e2230f201649058a7e704/cffi-2.0.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b", size = 212446, upload-time = "2025-09-08T23:23:03.472Z" }, + { url = "https://files.pythonhosted.org/packages/a9/f5/a2c23eb03b61a0b8747f211eb716446c826ad66818ddc7810cc2cc19b3f2/cffi-2.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b", size = 220101, upload-time = "2025-09-08T23:23:04.792Z" }, + { url = "https://files.pythonhosted.org/packages/f2/7f/e6647792fc5850d634695bc0e6ab4111ae88e89981d35ac269956605feba/cffi-2.0.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2", size = 207948, upload-time = "2025-09-08T23:23:06.127Z" }, + { url = "https://files.pythonhosted.org/packages/cb/1e/a5a1bd6f1fb30f22573f76533de12a00bf274abcdc55c8edab639078abb6/cffi-2.0.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3", size = 206422, upload-time = "2025-09-08T23:23:07.753Z" }, + { url = "https://files.pythonhosted.org/packages/98/df/0a1755e750013a2081e863e7cd37e0cdd02664372c754e5560099eb7aa44/cffi-2.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26", size = 219499, upload-time = "2025-09-08T23:23:09.648Z" }, + { url = "https://files.pythonhosted.org/packages/50/e1/a969e687fcf9ea58e6e2a928ad5e2dd88cc12f6f0ab477e9971f2309b57c/cffi-2.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c", size = 222928, upload-time = "2025-09-08T23:23:10.928Z" }, + { url = "https://files.pythonhosted.org/packages/36/54/0362578dd2c9e557a28ac77698ed67323ed5b9775ca9d3fe73fe191bb5d8/cffi-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b", size = 221302, upload-time = "2025-09-08T23:23:12.42Z" }, + { url = "https://files.pythonhosted.org/packages/eb/6d/bf9bda840d5f1dfdbf0feca87fbdb64a918a69bca42cfa0ba7b137c48cb8/cffi-2.0.0-cp313-cp313-win32.whl", hash = "sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27", size = 172909, upload-time = "2025-09-08T23:23:14.32Z" }, + { url = "https://files.pythonhosted.org/packages/37/18/6519e1ee6f5a1e579e04b9ddb6f1676c17368a7aba48299c3759bbc3c8b3/cffi-2.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75", size = 183402, upload-time = "2025-09-08T23:23:15.535Z" }, + { url = "https://files.pythonhosted.org/packages/cb/0e/02ceeec9a7d6ee63bb596121c2c8e9b3a9e150936f4fbef6ca1943e6137c/cffi-2.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91", size = 177780, upload-time = "2025-09-08T23:23:16.761Z" }, + { url = "https://files.pythonhosted.org/packages/92/c4/3ce07396253a83250ee98564f8d7e9789fab8e58858f35d07a9a2c78de9f/cffi-2.0.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5", size = 185320, upload-time = "2025-09-08T23:23:18.087Z" }, + { url = "https://files.pythonhosted.org/packages/59/dd/27e9fa567a23931c838c6b02d0764611c62290062a6d4e8ff7863daf9730/cffi-2.0.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13", size = 181487, upload-time = "2025-09-08T23:23:19.622Z" }, + { url = "https://files.pythonhosted.org/packages/d6/43/0e822876f87ea8a4ef95442c3d766a06a51fc5298823f884ef87aaad168c/cffi-2.0.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b", size = 220049, upload-time = "2025-09-08T23:23:20.853Z" }, + { url = "https://files.pythonhosted.org/packages/b4/89/76799151d9c2d2d1ead63c2429da9ea9d7aac304603de0c6e8764e6e8e70/cffi-2.0.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c", size = 207793, upload-time = "2025-09-08T23:23:22.08Z" }, + { url = "https://files.pythonhosted.org/packages/bb/dd/3465b14bb9e24ee24cb88c9e3730f6de63111fffe513492bf8c808a3547e/cffi-2.0.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef", size = 206300, upload-time = "2025-09-08T23:23:23.314Z" }, + { url = "https://files.pythonhosted.org/packages/47/d9/d83e293854571c877a92da46fdec39158f8d7e68da75bf73581225d28e90/cffi-2.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775", size = 219244, upload-time = "2025-09-08T23:23:24.541Z" }, + { url = "https://files.pythonhosted.org/packages/2b/0f/1f177e3683aead2bb00f7679a16451d302c436b5cbf2505f0ea8146ef59e/cffi-2.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205", size = 222828, upload-time = "2025-09-08T23:23:26.143Z" }, + { url = "https://files.pythonhosted.org/packages/c6/0f/cafacebd4b040e3119dcb32fed8bdef8dfe94da653155f9d0b9dc660166e/cffi-2.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1", size = 220926, upload-time = "2025-09-08T23:23:27.873Z" }, + { url = "https://files.pythonhosted.org/packages/3e/aa/df335faa45b395396fcbc03de2dfcab242cd61a9900e914fe682a59170b1/cffi-2.0.0-cp314-cp314-win32.whl", hash = "sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f", size = 175328, upload-time = "2025-09-08T23:23:44.61Z" }, + { url = "https://files.pythonhosted.org/packages/bb/92/882c2d30831744296ce713f0feb4c1cd30f346ef747b530b5318715cc367/cffi-2.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25", size = 185650, upload-time = "2025-09-08T23:23:45.848Z" }, + { url = "https://files.pythonhosted.org/packages/9f/2c/98ece204b9d35a7366b5b2c6539c350313ca13932143e79dc133ba757104/cffi-2.0.0-cp314-cp314-win_arm64.whl", hash = "sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad", size = 180687, upload-time = "2025-09-08T23:23:47.105Z" }, + { url = "https://files.pythonhosted.org/packages/3e/61/c768e4d548bfa607abcda77423448df8c471f25dbe64fb2ef6d555eae006/cffi-2.0.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9", size = 188773, upload-time = "2025-09-08T23:23:29.347Z" }, + { url = "https://files.pythonhosted.org/packages/2c/ea/5f76bce7cf6fcd0ab1a1058b5af899bfbef198bea4d5686da88471ea0336/cffi-2.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d", size = 185013, upload-time = "2025-09-08T23:23:30.63Z" }, + { url = "https://files.pythonhosted.org/packages/be/b4/c56878d0d1755cf9caa54ba71e5d049479c52f9e4afc230f06822162ab2f/cffi-2.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c", size = 221593, upload-time = "2025-09-08T23:23:31.91Z" }, + { url = "https://files.pythonhosted.org/packages/e0/0d/eb704606dfe8033e7128df5e90fee946bbcb64a04fcdaa97321309004000/cffi-2.0.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8", size = 209354, upload-time = "2025-09-08T23:23:33.214Z" }, + { url = "https://files.pythonhosted.org/packages/d8/19/3c435d727b368ca475fb8742ab97c9cb13a0de600ce86f62eab7fa3eea60/cffi-2.0.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc", size = 208480, upload-time = "2025-09-08T23:23:34.495Z" }, + { url = "https://files.pythonhosted.org/packages/d0/44/681604464ed9541673e486521497406fadcc15b5217c3e326b061696899a/cffi-2.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592", size = 221584, upload-time = "2025-09-08T23:23:36.096Z" }, + { url = "https://files.pythonhosted.org/packages/25/8e/342a504ff018a2825d395d44d63a767dd8ebc927ebda557fecdaca3ac33a/cffi-2.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512", size = 224443, upload-time = "2025-09-08T23:23:37.328Z" }, + { url = "https://files.pythonhosted.org/packages/e1/5e/b666bacbbc60fbf415ba9988324a132c9a7a0448a9a8f125074671c0f2c3/cffi-2.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4", size = 223437, upload-time = "2025-09-08T23:23:38.945Z" }, + { url = "https://files.pythonhosted.org/packages/a0/1d/ec1a60bd1a10daa292d3cd6bb0b359a81607154fb8165f3ec95fe003b85c/cffi-2.0.0-cp314-cp314t-win32.whl", hash = "sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e", size = 180487, upload-time = "2025-09-08T23:23:40.423Z" }, + { url = "https://files.pythonhosted.org/packages/bf/41/4c1168c74fac325c0c8156f04b6749c8b6a8f405bbf91413ba088359f60d/cffi-2.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6", size = 191726, upload-time = "2025-09-08T23:23:41.742Z" }, + { url = "https://files.pythonhosted.org/packages/ae/3a/dbeec9d1ee0844c679f6bb5d6ad4e9f198b1224f4e7a32825f47f6192b0c/cffi-2.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9", size = 184195, upload-time = "2025-09-08T23:23:43.004Z" }, +] + +[[package]] +name = "charset-normalizer" +version = "3.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7b/60/e3bec1881450851b087e301bedc3daa9377a4d45f1c26aa90b0b235e38aa/charset_normalizer-3.4.6.tar.gz", hash = "sha256:1ae6b62897110aa7c79ea2f5dd38d1abca6db663687c0b1ad9aed6f6bae3d9d6", size = 143363, upload-time = "2026-03-15T18:53:25.478Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/28/ff6f234e628a2de61c458be2779cb182bc03f6eec12200d4a525bbfc9741/charset_normalizer-3.4.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:82060f995ab5003a2d6e0f4ad29065b7672b6593c8c63559beefe5b443242c3e", size = 293582, upload-time = "2026-03-15T18:50:25.454Z" }, + { url = "https://files.pythonhosted.org/packages/1c/b7/b1a117e5385cbdb3205f6055403c2a2a220c5ea80b8716c324eaf75c5c95/charset_normalizer-3.4.6-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:60c74963d8350241a79cb8feea80e54d518f72c26db618862a8f53e5023deaf9", size = 197240, upload-time = "2026-03-15T18:50:27.196Z" }, + { url = "https://files.pythonhosted.org/packages/a1/5f/2574f0f09f3c3bc1b2f992e20bce6546cb1f17e111c5be07308dc5427956/charset_normalizer-3.4.6-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f6e4333fb15c83f7d1482a76d45a0818897b3d33f00efd215528ff7c51b8e35d", size = 217363, upload-time = "2026-03-15T18:50:28.601Z" }, + { url = "https://files.pythonhosted.org/packages/4a/d1/0ae20ad77bc949ddd39b51bf383b6ca932f2916074c95cad34ae465ab71f/charset_normalizer-3.4.6-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:bc72863f4d9aba2e8fd9085e63548a324ba706d2ea2c83b260da08a59b9482de", size = 212994, upload-time = "2026-03-15T18:50:30.102Z" }, + { url = "https://files.pythonhosted.org/packages/60/ac/3233d262a310c1b12633536a07cde5ddd16985e6e7e238e9f3f9423d8eb9/charset_normalizer-3.4.6-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9cc4fc6c196d6a8b76629a70ddfcd4635a6898756e2d9cac5565cf0654605d73", size = 204697, upload-time = "2026-03-15T18:50:31.654Z" }, + { url = "https://files.pythonhosted.org/packages/25/3c/8a18fc411f085b82303cfb7154eed5bd49c77035eb7608d049468b53f87c/charset_normalizer-3.4.6-cp311-cp311-manylinux_2_31_armv7l.whl", hash = "sha256:0c173ce3a681f309f31b87125fecec7a5d1347261ea11ebbb856fa6006b23c8c", size = 191673, upload-time = "2026-03-15T18:50:33.433Z" }, + { url = "https://files.pythonhosted.org/packages/ff/a7/11cfe61d6c5c5c7438d6ba40919d0306ed83c9ab957f3d4da2277ff67836/charset_normalizer-3.4.6-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c907cdc8109f6c619e6254212e794d6548373cc40e1ec75e6e3823d9135d29cc", size = 201120, upload-time = "2026-03-15T18:50:35.105Z" }, + { url = "https://files.pythonhosted.org/packages/b5/10/cf491fa1abd47c02f69687046b896c950b92b6cd7337a27e6548adbec8e4/charset_normalizer-3.4.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:404a1e552cf5b675a87f0651f8b79f5f1e6fd100ee88dc612f89aa16abd4486f", size = 200911, upload-time = "2026-03-15T18:50:36.819Z" }, + { url = "https://files.pythonhosted.org/packages/28/70/039796160b48b18ed466fde0af84c1b090c4e288fae26cd674ad04a2d703/charset_normalizer-3.4.6-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:e3c701e954abf6fc03a49f7c579cc80c2c6cc52525340ca3186c41d3f33482ef", size = 192516, upload-time = "2026-03-15T18:50:38.228Z" }, + { url = "https://files.pythonhosted.org/packages/ff/34/c56f3223393d6ff3124b9e78f7de738047c2d6bc40a4f16ac0c9d7a1cb3c/charset_normalizer-3.4.6-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:7a6967aaf043bceabab5412ed6bd6bd26603dae84d5cb75bf8d9a74a4959d398", size = 218795, upload-time = "2026-03-15T18:50:39.664Z" }, + { url = "https://files.pythonhosted.org/packages/e8/3b/ce2d4f86c5282191a041fdc5a4ce18f1c6bd40a5bd1f74cf8625f08d51c1/charset_normalizer-3.4.6-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:5feb91325bbceade6afab43eb3b508c63ee53579fe896c77137ded51c6b6958e", size = 201833, upload-time = "2026-03-15T18:50:41.552Z" }, + { url = "https://files.pythonhosted.org/packages/3b/9b/b6a9f76b0fd7c5b5ec58b228ff7e85095370282150f0bd50b3126f5506d6/charset_normalizer-3.4.6-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:f820f24b09e3e779fe84c3c456cb4108a7aa639b0d1f02c28046e11bfcd088ed", size = 213920, upload-time = "2026-03-15T18:50:43.33Z" }, + { url = "https://files.pythonhosted.org/packages/ae/98/7bc23513a33d8172365ed30ee3a3b3fe1ece14a395e5fc94129541fc6003/charset_normalizer-3.4.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b35b200d6a71b9839a46b9b7fff66b6638bb52fc9658aa58796b0326595d3021", size = 206951, upload-time = "2026-03-15T18:50:44.789Z" }, + { url = "https://files.pythonhosted.org/packages/32/73/c0b86f3d1458468e11aec870e6b3feac931facbe105a894b552b0e518e79/charset_normalizer-3.4.6-cp311-cp311-win32.whl", hash = "sha256:9ca4c0b502ab399ef89248a2c84c54954f77a070f28e546a85e91da627d1301e", size = 143703, upload-time = "2026-03-15T18:50:46.103Z" }, + { url = "https://files.pythonhosted.org/packages/c6/e3/76f2facfe8eddee0bbd38d2594e709033338eae44ebf1738bcefe0a06185/charset_normalizer-3.4.6-cp311-cp311-win_amd64.whl", hash = "sha256:a9e68c9d88823b274cf1e72f28cb5dc89c990edf430b0bfd3e2fb0785bfeabf4", size = 153857, upload-time = "2026-03-15T18:50:47.563Z" }, + { url = "https://files.pythonhosted.org/packages/e2/dc/9abe19c9b27e6cd3636036b9d1b387b78c40dedbf0b47f9366737684b4b0/charset_normalizer-3.4.6-cp311-cp311-win_arm64.whl", hash = "sha256:97d0235baafca5f2b09cf332cc275f021e694e8362c6bb9c96fc9a0eb74fc316", size = 142751, upload-time = "2026-03-15T18:50:49.234Z" }, + { url = "https://files.pythonhosted.org/packages/e5/62/c0815c992c9545347aeea7859b50dc9044d147e2e7278329c6e02ac9a616/charset_normalizer-3.4.6-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:2ef7fedc7a6ecbe99969cd09632516738a97eeb8bd7258bf8a0f23114c057dab", size = 295154, upload-time = "2026-03-15T18:50:50.88Z" }, + { url = "https://files.pythonhosted.org/packages/a8/37/bdca6613c2e3c58c7421891d80cc3efa1d32e882f7c4a7ee6039c3fc951a/charset_normalizer-3.4.6-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a4ea868bc28109052790eb2b52a9ab33f3aa7adc02f96673526ff47419490e21", size = 199191, upload-time = "2026-03-15T18:50:52.658Z" }, + { url = "https://files.pythonhosted.org/packages/6c/92/9934d1bbd69f7f398b38c5dae1cbf9cc672e7c34a4adf7b17c0a9c17d15d/charset_normalizer-3.4.6-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:836ab36280f21fc1a03c99cd05c6b7af70d2697e374c7af0b61ed271401a72a2", size = 218674, upload-time = "2026-03-15T18:50:54.102Z" }, + { url = "https://files.pythonhosted.org/packages/af/90/25f6ab406659286be929fd89ab0e78e38aa183fc374e03aa3c12d730af8a/charset_normalizer-3.4.6-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:f1ce721c8a7dfec21fcbdfe04e8f68174183cf4e8188e0645e92aa23985c57ff", size = 215259, upload-time = "2026-03-15T18:50:55.616Z" }, + { url = "https://files.pythonhosted.org/packages/4e/ef/79a463eb0fff7f96afa04c1d4c51f8fc85426f918db467854bfb6a569ce3/charset_normalizer-3.4.6-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0e28d62a8fc7a1fa411c43bd65e346f3bce9716dc51b897fbe930c5987b402d5", size = 207276, upload-time = "2026-03-15T18:50:57.054Z" }, + { url = "https://files.pythonhosted.org/packages/f7/72/d0426afec4b71dc159fa6b4e68f868cd5a3ecd918fec5813a15d292a7d10/charset_normalizer-3.4.6-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:530d548084c4a9f7a16ed4a294d459b4f229db50df689bfe92027452452943a0", size = 195161, upload-time = "2026-03-15T18:50:58.686Z" }, + { url = "https://files.pythonhosted.org/packages/bf/18/c82b06a68bfcb6ce55e508225d210c7e6a4ea122bfc0748892f3dc4e8e11/charset_normalizer-3.4.6-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:30f445ae60aad5e1f8bdbb3108e39f6fbc09f4ea16c815c66578878325f8f15a", size = 203452, upload-time = "2026-03-15T18:51:00.196Z" }, + { url = "https://files.pythonhosted.org/packages/44/d6/0c25979b92f8adafdbb946160348d8d44aa60ce99afdc27df524379875cb/charset_normalizer-3.4.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ac2393c73378fea4e52aa56285a3d64be50f1a12395afef9cce47772f60334c2", size = 202272, upload-time = "2026-03-15T18:51:01.703Z" }, + { url = "https://files.pythonhosted.org/packages/2e/3d/7fea3e8fe84136bebbac715dd1221cc25c173c57a699c030ab9b8900cbb7/charset_normalizer-3.4.6-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:90ca27cd8da8118b18a52d5f547859cc1f8354a00cd1e8e5120df3e30d6279e5", size = 195622, upload-time = "2026-03-15T18:51:03.526Z" }, + { url = "https://files.pythonhosted.org/packages/57/8a/d6f7fd5cb96c58ef2f681424fbca01264461336d2a7fc875e4446b1f1346/charset_normalizer-3.4.6-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:8e5a94886bedca0f9b78fecd6afb6629142fd2605aa70a125d49f4edc6037ee6", size = 220056, upload-time = "2026-03-15T18:51:05.269Z" }, + { url = "https://files.pythonhosted.org/packages/16/50/478cdda782c8c9c3fb5da3cc72dd7f331f031e7f1363a893cdd6ca0f8de0/charset_normalizer-3.4.6-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:695f5c2823691a25f17bc5d5ffe79fa90972cc34b002ac6c843bb8a1720e950d", size = 203751, upload-time = "2026-03-15T18:51:06.858Z" }, + { url = "https://files.pythonhosted.org/packages/75/fc/cc2fcac943939c8e4d8791abfa139f685e5150cae9f94b60f12520feaa9b/charset_normalizer-3.4.6-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:231d4da14bcd9301310faf492051bee27df11f2bc7549bc0bb41fef11b82daa2", size = 216563, upload-time = "2026-03-15T18:51:08.564Z" }, + { url = "https://files.pythonhosted.org/packages/a8/b7/a4add1d9a5f68f3d037261aecca83abdb0ab15960a3591d340e829b37298/charset_normalizer-3.4.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a056d1ad2633548ca18ffa2f85c202cfb48b68615129143915b8dc72a806a923", size = 209265, upload-time = "2026-03-15T18:51:10.312Z" }, + { url = "https://files.pythonhosted.org/packages/6c/18/c094561b5d64a24277707698e54b7f67bd17a4f857bbfbb1072bba07c8bf/charset_normalizer-3.4.6-cp312-cp312-win32.whl", hash = "sha256:c2274ca724536f173122f36c98ce188fd24ce3dad886ec2b7af859518ce008a4", size = 144229, upload-time = "2026-03-15T18:51:11.694Z" }, + { url = "https://files.pythonhosted.org/packages/ab/20/0567efb3a8fd481b8f34f739ebddc098ed062a59fed41a8d193a61939e8f/charset_normalizer-3.4.6-cp312-cp312-win_amd64.whl", hash = "sha256:c8ae56368f8cc97c7e40a7ee18e1cedaf8e780cd8bc5ed5ac8b81f238614facb", size = 154277, upload-time = "2026-03-15T18:51:13.004Z" }, + { url = "https://files.pythonhosted.org/packages/15/57/28d79b44b51933119e21f65479d0864a8d5893e494cf5daab15df0247c17/charset_normalizer-3.4.6-cp312-cp312-win_arm64.whl", hash = "sha256:899d28f422116b08be5118ef350c292b36fc15ec2daeb9ea987c89281c7bb5c4", size = 142817, upload-time = "2026-03-15T18:51:14.408Z" }, + { url = "https://files.pythonhosted.org/packages/1e/1d/4fdabeef4e231153b6ed7567602f3b68265ec4e5b76d6024cf647d43d981/charset_normalizer-3.4.6-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:11afb56037cbc4b1555a34dd69151e8e069bee82e613a73bef6e714ce733585f", size = 294823, upload-time = "2026-03-15T18:51:15.755Z" }, + { url = "https://files.pythonhosted.org/packages/47/7b/20e809b89c69d37be748d98e84dce6820bf663cf19cf6b942c951a3e8f41/charset_normalizer-3.4.6-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:423fb7e748a08f854a08a222b983f4df1912b1daedce51a72bd24fe8f26a1843", size = 198527, upload-time = "2026-03-15T18:51:17.177Z" }, + { url = "https://files.pythonhosted.org/packages/37/a6/4f8d27527d59c039dce6f7622593cdcd3d70a8504d87d09eb11e9fdc6062/charset_normalizer-3.4.6-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:d73beaac5e90173ac3deb9928a74763a6d230f494e4bfb422c217a0ad8e629bf", size = 218388, upload-time = "2026-03-15T18:51:18.934Z" }, + { url = "https://files.pythonhosted.org/packages/f6/9b/4770ccb3e491a9bacf1c46cc8b812214fe367c86a96353ccc6daf87b01ec/charset_normalizer-3.4.6-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d60377dce4511655582e300dc1e5a5f24ba0cb229005a1d5c8d0cb72bb758ab8", size = 214563, upload-time = "2026-03-15T18:51:20.374Z" }, + { url = "https://files.pythonhosted.org/packages/2b/58/a199d245894b12db0b957d627516c78e055adc3a0d978bc7f65ddaf7c399/charset_normalizer-3.4.6-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:530e8cebeea0d76bdcf93357aa5e41336f48c3dc709ac52da2bb167c5b8271d9", size = 206587, upload-time = "2026-03-15T18:51:21.807Z" }, + { url = "https://files.pythonhosted.org/packages/7e/70/3def227f1ec56f5c69dfc8392b8bd63b11a18ca8178d9211d7cc5e5e4f27/charset_normalizer-3.4.6-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:a26611d9987b230566f24a0a125f17fe0de6a6aff9f25c9f564aaa2721a5fb88", size = 194724, upload-time = "2026-03-15T18:51:23.508Z" }, + { url = "https://files.pythonhosted.org/packages/58/ab/9318352e220c05efd31c2779a23b50969dc94b985a2efa643ed9077bfca5/charset_normalizer-3.4.6-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:34315ff4fc374b285ad7f4a0bf7dcbfe769e1b104230d40f49f700d4ab6bbd84", size = 202956, upload-time = "2026-03-15T18:51:25.239Z" }, + { url = "https://files.pythonhosted.org/packages/75/13/f3550a3ac25b70f87ac98c40d3199a8503676c2f1620efbf8d42095cfc40/charset_normalizer-3.4.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5f8ddd609f9e1af8c7bd6e2aca279c931aefecd148a14402d4e368f3171769fd", size = 201923, upload-time = "2026-03-15T18:51:26.682Z" }, + { url = "https://files.pythonhosted.org/packages/1b/db/c5c643b912740b45e8eec21de1bbab8e7fc085944d37e1e709d3dcd9d72f/charset_normalizer-3.4.6-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:80d0a5615143c0b3225e5e3ef22c8d5d51f3f72ce0ea6fb84c943546c7b25b6c", size = 195366, upload-time = "2026-03-15T18:51:28.129Z" }, + { url = "https://files.pythonhosted.org/packages/5a/67/3b1c62744f9b2448443e0eb160d8b001c849ec3fef591e012eda6484787c/charset_normalizer-3.4.6-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:92734d4d8d187a354a556626c221cd1a892a4e0802ccb2af432a1d85ec012194", size = 219752, upload-time = "2026-03-15T18:51:29.556Z" }, + { url = "https://files.pythonhosted.org/packages/f6/98/32ffbaf7f0366ffb0445930b87d103f6b406bc2c271563644bde8a2b1093/charset_normalizer-3.4.6-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:613f19aa6e082cf96e17e3ffd89383343d0d589abda756b7764cf78361fd41dc", size = 203296, upload-time = "2026-03-15T18:51:30.921Z" }, + { url = "https://files.pythonhosted.org/packages/41/12/5d308c1bbe60cabb0c5ef511574a647067e2a1f631bc8634fcafaccd8293/charset_normalizer-3.4.6-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:2b1a63e8224e401cafe7739f77efd3f9e7f5f2026bda4aead8e59afab537784f", size = 215956, upload-time = "2026-03-15T18:51:32.399Z" }, + { url = "https://files.pythonhosted.org/packages/53/e9/5f85f6c5e20669dbe56b165c67b0260547dea97dba7e187938833d791687/charset_normalizer-3.4.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6cceb5473417d28edd20c6c984ab6fee6c6267d38d906823ebfe20b03d607dc2", size = 208652, upload-time = "2026-03-15T18:51:34.214Z" }, + { url = "https://files.pythonhosted.org/packages/f1/11/897052ea6af56df3eef3ca94edafee410ca699ca0c7b87960ad19932c55e/charset_normalizer-3.4.6-cp313-cp313-win32.whl", hash = "sha256:d7de2637729c67d67cf87614b566626057e95c303bc0a55ffe391f5205e7003d", size = 143940, upload-time = "2026-03-15T18:51:36.15Z" }, + { url = "https://files.pythonhosted.org/packages/a1/5c/724b6b363603e419829f561c854b87ed7c7e31231a7908708ac086cdf3e2/charset_normalizer-3.4.6-cp313-cp313-win_amd64.whl", hash = "sha256:572d7c822caf521f0525ba1bce1a622a0b85cf47ffbdae6c9c19e3b5ac3c4389", size = 154101, upload-time = "2026-03-15T18:51:37.876Z" }, + { url = "https://files.pythonhosted.org/packages/01/a5/7abf15b4c0968e47020f9ca0935fb3274deb87cb288cd187cad92e8cdffd/charset_normalizer-3.4.6-cp313-cp313-win_arm64.whl", hash = "sha256:a4474d924a47185a06411e0064b803c68be044be2d60e50e8bddcc2649957c1f", size = 143109, upload-time = "2026-03-15T18:51:39.565Z" }, + { url = "https://files.pythonhosted.org/packages/25/6f/ffe1e1259f384594063ea1869bfb6be5cdb8bc81020fc36c3636bc8302a1/charset_normalizer-3.4.6-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:9cc6e6d9e571d2f863fa77700701dae73ed5f78881efc8b3f9a4398772ff53e8", size = 294458, upload-time = "2026-03-15T18:51:41.134Z" }, + { url = "https://files.pythonhosted.org/packages/56/60/09bb6c13a8c1016c2ed5c6a6488e4ffef506461aa5161662bd7636936fb1/charset_normalizer-3.4.6-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ef5960d965e67165d75b7c7ffc60a83ec5abfc5c11b764ec13ea54fbef8b4421", size = 199277, upload-time = "2026-03-15T18:51:42.953Z" }, + { url = "https://files.pythonhosted.org/packages/00/50/dcfbb72a5138bbefdc3332e8d81a23494bf67998b4b100703fd15fa52d81/charset_normalizer-3.4.6-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:b3694e3f87f8ac7ce279d4355645b3c878d24d1424581b46282f24b92f5a4ae2", size = 218758, upload-time = "2026-03-15T18:51:44.339Z" }, + { url = "https://files.pythonhosted.org/packages/03/b3/d79a9a191bb75f5aa81f3aaaa387ef29ce7cb7a9e5074ba8ea095cc073c2/charset_normalizer-3.4.6-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5d11595abf8dd942a77883a39d81433739b287b6aa71620f15164f8096221b30", size = 215299, upload-time = "2026-03-15T18:51:45.871Z" }, + { url = "https://files.pythonhosted.org/packages/76/7e/bc8911719f7084f72fd545f647601ea3532363927f807d296a8c88a62c0d/charset_normalizer-3.4.6-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7bda6eebafd42133efdca535b04ccb338ab29467b3f7bf79569883676fc628db", size = 206811, upload-time = "2026-03-15T18:51:47.308Z" }, + { url = "https://files.pythonhosted.org/packages/e2/40/c430b969d41dda0c465aa36cc7c2c068afb67177bef50905ac371b28ccc7/charset_normalizer-3.4.6-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:bbc8c8650c6e51041ad1be191742b8b421d05bbd3410f43fa2a00c8db87678e8", size = 193706, upload-time = "2026-03-15T18:51:48.849Z" }, + { url = "https://files.pythonhosted.org/packages/48/15/e35e0590af254f7df984de1323640ef375df5761f615b6225ba8deb9799a/charset_normalizer-3.4.6-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:22c6f0c2fbc31e76c3b8a86fba1a56eda6166e238c29cdd3d14befdb4a4e4815", size = 202706, upload-time = "2026-03-15T18:51:50.257Z" }, + { url = "https://files.pythonhosted.org/packages/5e/bd/f736f7b9cc5e93a18b794a50346bb16fbfd6b37f99e8f306f7951d27c17c/charset_normalizer-3.4.6-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7edbed096e4a4798710ed6bc75dcaa2a21b68b6c356553ac4823c3658d53743a", size = 202497, upload-time = "2026-03-15T18:51:52.012Z" }, + { url = "https://files.pythonhosted.org/packages/9d/ba/2cc9e3e7dfdf7760a6ed8da7446d22536f3d0ce114ac63dee2a5a3599e62/charset_normalizer-3.4.6-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:7f9019c9cb613f084481bd6a100b12e1547cf2efe362d873c2e31e4035a6fa43", size = 193511, upload-time = "2026-03-15T18:51:53.723Z" }, + { url = "https://files.pythonhosted.org/packages/9e/cb/5be49b5f776e5613be07298c80e1b02a2d900f7a7de807230595c85a8b2e/charset_normalizer-3.4.6-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:58c948d0d086229efc484fe2f30c2d382c86720f55cd9bc33591774348ad44e0", size = 220133, upload-time = "2026-03-15T18:51:55.333Z" }, + { url = "https://files.pythonhosted.org/packages/83/43/99f1b5dad345accb322c80c7821071554f791a95ee50c1c90041c157ae99/charset_normalizer-3.4.6-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:419a9d91bd238052642a51938af8ac05da5b3343becde08d5cdeab9046df9ee1", size = 203035, upload-time = "2026-03-15T18:51:56.736Z" }, + { url = "https://files.pythonhosted.org/packages/87/9a/62c2cb6a531483b55dddff1a68b3d891a8b498f3ca555fbcf2978e804d9d/charset_normalizer-3.4.6-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:5273b9f0b5835ff0350c0828faea623c68bfa65b792720c453e22b25cc72930f", size = 216321, upload-time = "2026-03-15T18:51:58.17Z" }, + { url = "https://files.pythonhosted.org/packages/6e/79/94a010ff81e3aec7c293eb82c28f930918e517bc144c9906a060844462eb/charset_normalizer-3.4.6-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:0e901eb1049fdb80f5bd11ed5ea1e498ec423102f7a9b9e4645d5b8204ff2815", size = 208973, upload-time = "2026-03-15T18:51:59.998Z" }, + { url = "https://files.pythonhosted.org/packages/2a/57/4ecff6d4ec8585342f0c71bc03efaa99cb7468f7c91a57b105bcd561cea8/charset_normalizer-3.4.6-cp314-cp314-win32.whl", hash = "sha256:b4ff1d35e8c5bd078be89349b6f3a845128e685e751b6ea1169cf2160b344c4d", size = 144610, upload-time = "2026-03-15T18:52:02.213Z" }, + { url = "https://files.pythonhosted.org/packages/80/94/8434a02d9d7f168c25767c64671fead8d599744a05d6a6c877144c754246/charset_normalizer-3.4.6-cp314-cp314-win_amd64.whl", hash = "sha256:74119174722c4349af9708993118581686f343adc1c8c9c007d59be90d077f3f", size = 154962, upload-time = "2026-03-15T18:52:03.658Z" }, + { url = "https://files.pythonhosted.org/packages/46/4c/48f2cdbfd923026503dfd67ccea45c94fd8fe988d9056b468579c66ed62b/charset_normalizer-3.4.6-cp314-cp314-win_arm64.whl", hash = "sha256:e5bcc1a1ae744e0bb59641171ae53743760130600da8db48cbb6e4918e186e4e", size = 143595, upload-time = "2026-03-15T18:52:05.123Z" }, + { url = "https://files.pythonhosted.org/packages/31/93/8878be7569f87b14f1d52032946131bcb6ebbd8af3e20446bc04053dc3f1/charset_normalizer-3.4.6-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:ad8faf8df23f0378c6d527d8b0b15ea4a2e23c89376877c598c4870d1b2c7866", size = 314828, upload-time = "2026-03-15T18:52:06.831Z" }, + { url = "https://files.pythonhosted.org/packages/06/b6/fae511ca98aac69ecc35cde828b0a3d146325dd03d99655ad38fc2cc3293/charset_normalizer-3.4.6-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f5ea69428fa1b49573eef0cc44a1d43bebd45ad0c611eb7d7eac760c7ae771bc", size = 208138, upload-time = "2026-03-15T18:52:08.239Z" }, + { url = "https://files.pythonhosted.org/packages/54/57/64caf6e1bf07274a1e0b7c160a55ee9e8c9ec32c46846ce59b9c333f7008/charset_normalizer-3.4.6-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:06a7e86163334edfc5d20fe104db92fcd666e5a5df0977cb5680a506fe26cc8e", size = 224679, upload-time = "2026-03-15T18:52:10.043Z" }, + { url = "https://files.pythonhosted.org/packages/aa/cb/9ff5a25b9273ef160861b41f6937f86fae18b0792fe0a8e75e06acb08f1d/charset_normalizer-3.4.6-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:e1f6e2f00a6b8edb562826e4632e26d063ac10307e80f7461f7de3ad8ef3f077", size = 223475, upload-time = "2026-03-15T18:52:11.854Z" }, + { url = "https://files.pythonhosted.org/packages/fc/97/440635fc093b8d7347502a377031f9605a1039c958f3cd18dcacffb37743/charset_normalizer-3.4.6-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:95b52c68d64c1878818687a473a10547b3292e82b6f6fe483808fb1468e2f52f", size = 215230, upload-time = "2026-03-15T18:52:13.325Z" }, + { url = "https://files.pythonhosted.org/packages/cd/24/afff630feb571a13f07c8539fbb502d2ab494019492aaffc78ef41f1d1d0/charset_normalizer-3.4.6-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:7504e9b7dc05f99a9bbb4525c67a2c155073b44d720470a148b34166a69c054e", size = 199045, upload-time = "2026-03-15T18:52:14.752Z" }, + { url = "https://files.pythonhosted.org/packages/e5/17/d1399ecdaf7e0498c327433e7eefdd862b41236a7e484355b8e0e5ebd64b/charset_normalizer-3.4.6-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:172985e4ff804a7ad08eebec0a1640ece87ba5041d565fff23c8f99c1f389484", size = 211658, upload-time = "2026-03-15T18:52:16.278Z" }, + { url = "https://files.pythonhosted.org/packages/b5/38/16baa0affb957b3d880e5ac2144caf3f9d7de7bc4a91842e447fbb5e8b67/charset_normalizer-3.4.6-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:4be9f4830ba8741527693848403e2c457c16e499100963ec711b1c6f2049b7c7", size = 210769, upload-time = "2026-03-15T18:52:17.782Z" }, + { url = "https://files.pythonhosted.org/packages/05/34/c531bc6ac4c21da9ddfddb3107be2287188b3ea4b53b70fc58f2a77ac8d8/charset_normalizer-3.4.6-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:79090741d842f564b1b2827c0b82d846405b744d31e84f18d7a7b41c20e473ff", size = 201328, upload-time = "2026-03-15T18:52:19.553Z" }, + { url = "https://files.pythonhosted.org/packages/fa/73/a5a1e9ca5f234519c1953608a03fe109c306b97fdfb25f09182babad51a7/charset_normalizer-3.4.6-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:87725cfb1a4f1f8c2fc9890ae2f42094120f4b44db9360be5d99a4c6b0e03a9e", size = 225302, upload-time = "2026-03-15T18:52:21.043Z" }, + { url = "https://files.pythonhosted.org/packages/ba/f6/cd782923d112d296294dea4bcc7af5a7ae0f86ab79f8fefbda5526b6cfc0/charset_normalizer-3.4.6-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:fcce033e4021347d80ed9c66dcf1e7b1546319834b74445f561d2e2221de5659", size = 211127, upload-time = "2026-03-15T18:52:22.491Z" }, + { url = "https://files.pythonhosted.org/packages/0e/c5/0b6898950627af7d6103a449b22320372c24c6feda91aa24e201a478d161/charset_normalizer-3.4.6-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:ca0276464d148c72defa8bb4390cce01b4a0e425f3b50d1435aa6d7a18107602", size = 222840, upload-time = "2026-03-15T18:52:24.113Z" }, + { url = "https://files.pythonhosted.org/packages/7d/25/c4bba773bef442cbdc06111d40daa3de5050a676fa26e85090fc54dd12f0/charset_normalizer-3.4.6-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:197c1a244a274bb016dd8b79204850144ef77fe81c5b797dc389327adb552407", size = 216890, upload-time = "2026-03-15T18:52:25.541Z" }, + { url = "https://files.pythonhosted.org/packages/35/1a/05dacadb0978da72ee287b0143097db12f2e7e8d3ffc4647da07a383b0b7/charset_normalizer-3.4.6-cp314-cp314t-win32.whl", hash = "sha256:2a24157fa36980478dd1770b585c0f30d19e18f4fb0c47c13aa568f871718579", size = 155379, upload-time = "2026-03-15T18:52:27.05Z" }, + { url = "https://files.pythonhosted.org/packages/5d/7a/d269d834cb3a76291651256f3b9a5945e81d0a49ab9f4a498964e83c0416/charset_normalizer-3.4.6-cp314-cp314t-win_amd64.whl", hash = "sha256:cd5e2801c89992ed8c0a3f0293ae83c159a60d9a5d685005383ef4caca77f2c4", size = 169043, upload-time = "2026-03-15T18:52:28.502Z" }, + { url = "https://files.pythonhosted.org/packages/23/06/28b29fba521a37a8932c6a84192175c34d49f84a6d4773fa63d05f9aff22/charset_normalizer-3.4.6-cp314-cp314t-win_arm64.whl", hash = "sha256:47955475ac79cc504ef2704b192364e51d0d473ad452caedd0002605f780101c", size = 148523, upload-time = "2026-03-15T18:52:29.956Z" }, + { url = "https://files.pythonhosted.org/packages/2a/68/687187c7e26cb24ccbd88e5069f5ef00eba804d36dde11d99aad0838ab45/charset_normalizer-3.4.6-py3-none-any.whl", hash = "sha256:947cf925bc916d90adba35a64c82aace04fa39b46b52d4630ece166655905a69", size = 61455, upload-time = "2026-03-15T18:53:23.833Z" }, +] + +[[package]] +name = "cryptography" +version = "46.0.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/60/04/ee2a9e8542e4fa2773b81771ff8349ff19cdd56b7258a0cc442639052edb/cryptography-46.0.5.tar.gz", hash = "sha256:abace499247268e3757271b2f1e244b36b06f8515cf27c4d49468fc9eb16e93d", size = 750064, upload-time = "2026-02-10T19:18:38.255Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f7/81/b0bb27f2ba931a65409c6b8a8b358a7f03c0e46eceacddff55f7c84b1f3b/cryptography-46.0.5-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:351695ada9ea9618b3500b490ad54c739860883df6c1f555e088eaf25b1bbaad", size = 7176289, upload-time = "2026-02-10T19:17:08.274Z" }, + { url = "https://files.pythonhosted.org/packages/ff/9e/6b4397a3e3d15123de3b1806ef342522393d50736c13b20ec4c9ea6693a6/cryptography-46.0.5-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:c18ff11e86df2e28854939acde2d003f7984f721eba450b56a200ad90eeb0e6b", size = 4275637, upload-time = "2026-02-10T19:17:10.53Z" }, + { url = "https://files.pythonhosted.org/packages/63/e7/471ab61099a3920b0c77852ea3f0ea611c9702f651600397ac567848b897/cryptography-46.0.5-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4d7e3d356b8cd4ea5aff04f129d5f66ebdc7b6f8eae802b93739ed520c47c79b", size = 4424742, upload-time = "2026-02-10T19:17:12.388Z" }, + { url = "https://files.pythonhosted.org/packages/37/53/a18500f270342d66bf7e4d9f091114e31e5ee9e7375a5aba2e85a91e0044/cryptography-46.0.5-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:50bfb6925eff619c9c023b967d5b77a54e04256c4281b0e21336a130cd7fc263", size = 4277528, upload-time = "2026-02-10T19:17:13.853Z" }, + { url = "https://files.pythonhosted.org/packages/22/29/c2e812ebc38c57b40e7c583895e73c8c5adb4d1e4a0cc4c5a4fdab2b1acc/cryptography-46.0.5-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:803812e111e75d1aa73690d2facc295eaefd4439be1023fefc4995eaea2af90d", size = 4947993, upload-time = "2026-02-10T19:17:15.618Z" }, + { url = "https://files.pythonhosted.org/packages/6b/e7/237155ae19a9023de7e30ec64e5d99a9431a567407ac21170a046d22a5a3/cryptography-46.0.5-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:3ee190460e2fbe447175cda91b88b84ae8322a104fc27766ad09428754a618ed", size = 4456855, upload-time = "2026-02-10T19:17:17.221Z" }, + { url = "https://files.pythonhosted.org/packages/2d/87/fc628a7ad85b81206738abbd213b07702bcbdada1dd43f72236ef3cffbb5/cryptography-46.0.5-cp311-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:f145bba11b878005c496e93e257c1e88f154d278d2638e6450d17e0f31e558d2", size = 3984635, upload-time = "2026-02-10T19:17:18.792Z" }, + { url = "https://files.pythonhosted.org/packages/84/29/65b55622bde135aedf4565dc509d99b560ee4095e56989e815f8fd2aa910/cryptography-46.0.5-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:e9251e3be159d1020c4030bd2e5f84d6a43fe54b6c19c12f51cde9542a2817b2", size = 4277038, upload-time = "2026-02-10T19:17:20.256Z" }, + { url = "https://files.pythonhosted.org/packages/bc/36/45e76c68d7311432741faf1fbf7fac8a196a0a735ca21f504c75d37e2558/cryptography-46.0.5-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:47fb8a66058b80e509c47118ef8a75d14c455e81ac369050f20ba0d23e77fee0", size = 4912181, upload-time = "2026-02-10T19:17:21.825Z" }, + { url = "https://files.pythonhosted.org/packages/6d/1a/c1ba8fead184d6e3d5afcf03d569acac5ad063f3ac9fb7258af158f7e378/cryptography-46.0.5-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:4c3341037c136030cb46e4b1e17b7418ea4cbd9dd207e4a6f3b2b24e0d4ac731", size = 4456482, upload-time = "2026-02-10T19:17:25.133Z" }, + { url = "https://files.pythonhosted.org/packages/f9/e5/3fb22e37f66827ced3b902cf895e6a6bc1d095b5b26be26bd13c441fdf19/cryptography-46.0.5-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:890bcb4abd5a2d3f852196437129eb3667d62630333aacc13dfd470fad3aaa82", size = 4405497, upload-time = "2026-02-10T19:17:26.66Z" }, + { url = "https://files.pythonhosted.org/packages/1a/df/9d58bb32b1121a8a2f27383fabae4d63080c7ca60b9b5c88be742be04ee7/cryptography-46.0.5-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:80a8d7bfdf38f87ca30a5391c0c9ce4ed2926918e017c29ddf643d0ed2778ea1", size = 4667819, upload-time = "2026-02-10T19:17:28.569Z" }, + { url = "https://files.pythonhosted.org/packages/ea/ed/325d2a490c5e94038cdb0117da9397ece1f11201f425c4e9c57fe5b9f08b/cryptography-46.0.5-cp311-abi3-win32.whl", hash = "sha256:60ee7e19e95104d4c03871d7d7dfb3d22ef8a9b9c6778c94e1c8fcc8365afd48", size = 3028230, upload-time = "2026-02-10T19:17:30.518Z" }, + { url = "https://files.pythonhosted.org/packages/e9/5a/ac0f49e48063ab4255d9e3b79f5def51697fce1a95ea1370f03dc9db76f6/cryptography-46.0.5-cp311-abi3-win_amd64.whl", hash = "sha256:38946c54b16c885c72c4f59846be9743d699eee2b69b6988e0a00a01f46a61a4", size = 3480909, upload-time = "2026-02-10T19:17:32.083Z" }, + { url = "https://files.pythonhosted.org/packages/00/13/3d278bfa7a15a96b9dc22db5a12ad1e48a9eb3d40e1827ef66a5df75d0d0/cryptography-46.0.5-cp314-cp314t-macosx_10_9_universal2.whl", hash = "sha256:94a76daa32eb78d61339aff7952ea819b1734b46f73646a07decb40e5b3448e2", size = 7119287, upload-time = "2026-02-10T19:17:33.801Z" }, + { url = "https://files.pythonhosted.org/packages/67/c8/581a6702e14f0898a0848105cbefd20c058099e2c2d22ef4e476dfec75d7/cryptography-46.0.5-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5be7bf2fb40769e05739dd0046e7b26f9d4670badc7b032d6ce4db64dddc0678", size = 4265728, upload-time = "2026-02-10T19:17:35.569Z" }, + { url = "https://files.pythonhosted.org/packages/dd/4a/ba1a65ce8fc65435e5a849558379896c957870dd64fecea97b1ad5f46a37/cryptography-46.0.5-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fe346b143ff9685e40192a4960938545c699054ba11d4f9029f94751e3f71d87", size = 4408287, upload-time = "2026-02-10T19:17:36.938Z" }, + { url = "https://files.pythonhosted.org/packages/f8/67/8ffdbf7b65ed1ac224d1c2df3943553766914a8ca718747ee3871da6107e/cryptography-46.0.5-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:c69fd885df7d089548a42d5ec05be26050ebcd2283d89b3d30676eb32ff87dee", size = 4270291, upload-time = "2026-02-10T19:17:38.748Z" }, + { url = "https://files.pythonhosted.org/packages/f8/e5/f52377ee93bc2f2bba55a41a886fd208c15276ffbd2569f2ddc89d50e2c5/cryptography-46.0.5-cp314-cp314t-manylinux_2_28_ppc64le.whl", hash = "sha256:8293f3dea7fc929ef7240796ba231413afa7b68ce38fd21da2995549f5961981", size = 4927539, upload-time = "2026-02-10T19:17:40.241Z" }, + { url = "https://files.pythonhosted.org/packages/3b/02/cfe39181b02419bbbbcf3abdd16c1c5c8541f03ca8bda240debc467d5a12/cryptography-46.0.5-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:1abfdb89b41c3be0365328a410baa9df3ff8a9110fb75e7b52e66803ddabc9a9", size = 4442199, upload-time = "2026-02-10T19:17:41.789Z" }, + { url = "https://files.pythonhosted.org/packages/c0/96/2fcaeb4873e536cf71421a388a6c11b5bc846e986b2b069c79363dc1648e/cryptography-46.0.5-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:d66e421495fdb797610a08f43b05269e0a5ea7f5e652a89bfd5a7d3c1dee3648", size = 3960131, upload-time = "2026-02-10T19:17:43.379Z" }, + { url = "https://files.pythonhosted.org/packages/d8/d2/b27631f401ddd644e94c5cf33c9a4069f72011821cf3dc7309546b0642a0/cryptography-46.0.5-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:4e817a8920bfbcff8940ecfd60f23d01836408242b30f1a708d93198393a80b4", size = 4270072, upload-time = "2026-02-10T19:17:45.481Z" }, + { url = "https://files.pythonhosted.org/packages/f4/a7/60d32b0370dae0b4ebe55ffa10e8599a2a59935b5ece1b9f06edb73abdeb/cryptography-46.0.5-cp314-cp314t-manylinux_2_34_ppc64le.whl", hash = "sha256:68f68d13f2e1cb95163fa3b4db4bf9a159a418f5f6e7242564fc75fcae667fd0", size = 4892170, upload-time = "2026-02-10T19:17:46.997Z" }, + { url = "https://files.pythonhosted.org/packages/d2/b9/cf73ddf8ef1164330eb0b199a589103c363afa0cf794218c24d524a58eab/cryptography-46.0.5-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:a3d1fae9863299076f05cb8a778c467578262fae09f9dc0ee9b12eb4268ce663", size = 4441741, upload-time = "2026-02-10T19:17:48.661Z" }, + { url = "https://files.pythonhosted.org/packages/5f/eb/eee00b28c84c726fe8fa0158c65afe312d9c3b78d9d01daf700f1f6e37ff/cryptography-46.0.5-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:c4143987a42a2397f2fc3b4d7e3a7d313fbe684f67ff443999e803dd75a76826", size = 4396728, upload-time = "2026-02-10T19:17:50.058Z" }, + { url = "https://files.pythonhosted.org/packages/65/f4/6bc1a9ed5aef7145045114b75b77c2a8261b4d38717bd8dea111a63c3442/cryptography-46.0.5-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:7d731d4b107030987fd61a7f8ab512b25b53cef8f233a97379ede116f30eb67d", size = 4652001, upload-time = "2026-02-10T19:17:51.54Z" }, + { url = "https://files.pythonhosted.org/packages/86/ef/5d00ef966ddd71ac2e6951d278884a84a40ffbd88948ef0e294b214ae9e4/cryptography-46.0.5-cp314-cp314t-win32.whl", hash = "sha256:c3bcce8521d785d510b2aad26ae2c966092b7daa8f45dd8f44734a104dc0bc1a", size = 3003637, upload-time = "2026-02-10T19:17:52.997Z" }, + { url = "https://files.pythonhosted.org/packages/b7/57/f3f4160123da6d098db78350fdfd9705057aad21de7388eacb2401dceab9/cryptography-46.0.5-cp314-cp314t-win_amd64.whl", hash = "sha256:4d8ae8659ab18c65ced284993c2265910f6c9e650189d4e3f68445ef82a810e4", size = 3469487, upload-time = "2026-02-10T19:17:54.549Z" }, + { url = "https://files.pythonhosted.org/packages/e2/fa/a66aa722105ad6a458bebd64086ca2b72cdd361fed31763d20390f6f1389/cryptography-46.0.5-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:4108d4c09fbbf2789d0c926eb4152ae1760d5a2d97612b92d508d96c861e4d31", size = 7170514, upload-time = "2026-02-10T19:17:56.267Z" }, + { url = "https://files.pythonhosted.org/packages/0f/04/c85bdeab78c8bc77b701bf0d9bdcf514c044e18a46dcff330df5448631b0/cryptography-46.0.5-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7d1f30a86d2757199cb2d56e48cce14deddf1f9c95f1ef1b64ee91ea43fe2e18", size = 4275349, upload-time = "2026-02-10T19:17:58.419Z" }, + { url = "https://files.pythonhosted.org/packages/5c/32/9b87132a2f91ee7f5223b091dc963055503e9b442c98fc0b8a5ca765fab0/cryptography-46.0.5-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:039917b0dc418bb9f6edce8a906572d69e74bd330b0b3fea4f79dab7f8ddd235", size = 4420667, upload-time = "2026-02-10T19:18:00.619Z" }, + { url = "https://files.pythonhosted.org/packages/a1/a6/a7cb7010bec4b7c5692ca6f024150371b295ee1c108bdc1c400e4c44562b/cryptography-46.0.5-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:ba2a27ff02f48193fc4daeadf8ad2590516fa3d0adeeb34336b96f7fa64c1e3a", size = 4276980, upload-time = "2026-02-10T19:18:02.379Z" }, + { url = "https://files.pythonhosted.org/packages/8e/7c/c4f45e0eeff9b91e3f12dbd0e165fcf2a38847288fcfd889deea99fb7b6d/cryptography-46.0.5-cp38-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:61aa400dce22cb001a98014f647dc21cda08f7915ceb95df0c9eaf84b4b6af76", size = 4939143, upload-time = "2026-02-10T19:18:03.964Z" }, + { url = "https://files.pythonhosted.org/packages/37/19/e1b8f964a834eddb44fa1b9a9976f4e414cbb7aa62809b6760c8803d22d1/cryptography-46.0.5-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:3ce58ba46e1bc2aac4f7d9290223cead56743fa6ab94a5d53292ffaac6a91614", size = 4453674, upload-time = "2026-02-10T19:18:05.588Z" }, + { url = "https://files.pythonhosted.org/packages/db/ed/db15d3956f65264ca204625597c410d420e26530c4e2943e05a0d2f24d51/cryptography-46.0.5-cp38-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:420d0e909050490d04359e7fdb5ed7e667ca5c3c402b809ae2563d7e66a92229", size = 3978801, upload-time = "2026-02-10T19:18:07.167Z" }, + { url = "https://files.pythonhosted.org/packages/41/e2/df40a31d82df0a70a0daf69791f91dbb70e47644c58581d654879b382d11/cryptography-46.0.5-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:582f5fcd2afa31622f317f80426a027f30dc792e9c80ffee87b993200ea115f1", size = 4276755, upload-time = "2026-02-10T19:18:09.813Z" }, + { url = "https://files.pythonhosted.org/packages/33/45/726809d1176959f4a896b86907b98ff4391a8aa29c0aaaf9450a8a10630e/cryptography-46.0.5-cp38-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:bfd56bb4b37ed4f330b82402f6f435845a5f5648edf1ad497da51a8452d5d62d", size = 4901539, upload-time = "2026-02-10T19:18:11.263Z" }, + { url = "https://files.pythonhosted.org/packages/99/0f/a3076874e9c88ecb2ecc31382f6e7c21b428ede6f55aafa1aa272613e3cd/cryptography-46.0.5-cp38-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:a3d507bb6a513ca96ba84443226af944b0f7f47dcc9a399d110cd6146481d24c", size = 4452794, upload-time = "2026-02-10T19:18:12.914Z" }, + { url = "https://files.pythonhosted.org/packages/02/ef/ffeb542d3683d24194a38f66ca17c0a4b8bf10631feef44a7ef64e631b1a/cryptography-46.0.5-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:9f16fbdf4da055efb21c22d81b89f155f02ba420558db21288b3d0035bafd5f4", size = 4404160, upload-time = "2026-02-10T19:18:14.375Z" }, + { url = "https://files.pythonhosted.org/packages/96/93/682d2b43c1d5f1406ed048f377c0fc9fc8f7b0447a478d5c65ab3d3a66eb/cryptography-46.0.5-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:ced80795227d70549a411a4ab66e8ce307899fad2220ce5ab2f296e687eacde9", size = 4667123, upload-time = "2026-02-10T19:18:15.886Z" }, + { url = "https://files.pythonhosted.org/packages/45/2d/9c5f2926cb5300a8eefc3f4f0b3f3df39db7f7ce40c8365444c49363cbda/cryptography-46.0.5-cp38-abi3-win32.whl", hash = "sha256:02f547fce831f5096c9a567fd41bc12ca8f11df260959ecc7c3202555cc47a72", size = 3010220, upload-time = "2026-02-10T19:18:17.361Z" }, + { url = "https://files.pythonhosted.org/packages/48/ef/0c2f4a8e31018a986949d34a01115dd057bf536905dca38897bacd21fac3/cryptography-46.0.5-cp38-abi3-win_amd64.whl", hash = "sha256:556e106ee01aa13484ce9b0239bca667be5004efb0aabbed28d353df86445595", size = 3467050, upload-time = "2026-02-10T19:18:18.899Z" }, + { url = "https://files.pythonhosted.org/packages/eb/dd/2d9fdb07cebdf3d51179730afb7d5e576153c6744c3ff8fded23030c204e/cryptography-46.0.5-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:3b4995dc971c9fb83c25aa44cf45f02ba86f71ee600d81091c2f0cbae116b06c", size = 3476964, upload-time = "2026-02-10T19:18:20.687Z" }, + { url = "https://files.pythonhosted.org/packages/e9/6f/6cc6cc9955caa6eaf83660b0da2b077c7fe8ff9950a3c5e45d605038d439/cryptography-46.0.5-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:bc84e875994c3b445871ea7181d424588171efec3e185dced958dad9e001950a", size = 4218321, upload-time = "2026-02-10T19:18:22.349Z" }, + { url = "https://files.pythonhosted.org/packages/3e/5d/c4da701939eeee699566a6c1367427ab91a8b7088cc2328c09dbee940415/cryptography-46.0.5-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:2ae6971afd6246710480e3f15824ed3029a60fc16991db250034efd0b9fb4356", size = 4381786, upload-time = "2026-02-10T19:18:24.529Z" }, + { url = "https://files.pythonhosted.org/packages/ac/97/a538654732974a94ff96c1db621fa464f455c02d4bb7d2652f4edc21d600/cryptography-46.0.5-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:d861ee9e76ace6cf36a6a89b959ec08e7bc2493ee39d07ffe5acb23ef46d27da", size = 4217990, upload-time = "2026-02-10T19:18:25.957Z" }, + { url = "https://files.pythonhosted.org/packages/ae/11/7e500d2dd3ba891197b9efd2da5454b74336d64a7cc419aa7327ab74e5f6/cryptography-46.0.5-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:2b7a67c9cd56372f3249b39699f2ad479f6991e62ea15800973b956f4b73e257", size = 4381252, upload-time = "2026-02-10T19:18:27.496Z" }, + { url = "https://files.pythonhosted.org/packages/bc/58/6b3d24e6b9bc474a2dcdee65dfd1f008867015408a271562e4b690561a4d/cryptography-46.0.5-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:8456928655f856c6e1533ff59d5be76578a7157224dbd9ce6872f25055ab9ab7", size = 3407605, upload-time = "2026-02-10T19:18:29.233Z" }, +] + +[[package]] +name = "idna" +version = "3.11" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/0703ccc57f3a7233505399edb88de3cbd678da106337b9fcde432b65ed60/idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902", size = 194582, upload-time = "2025-10-12T14:55:20.501Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea", size = 71008, upload-time = "2025-10-12T14:55:18.883Z" }, +] + +[[package]] +name = "librt" +version = "0.8.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/56/9c/b4b0c54d84da4a94b37bd44151e46d5e583c9534c7e02250b961b1b6d8a8/librt-0.8.1.tar.gz", hash = "sha256:be46a14693955b3bd96014ccbdb8339ee8c9346fbe11c1b78901b55125f14c73", size = 177471, upload-time = "2026-02-17T16:13:06.101Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1d/01/0e748af5e4fee180cf7cd12bd12b0513ad23b045dccb2a83191bde82d168/librt-0.8.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:681dc2451d6d846794a828c16c22dc452d924e9f700a485b7ecb887a30aad1fd", size = 65315, upload-time = "2026-02-17T16:11:25.152Z" }, + { url = "https://files.pythonhosted.org/packages/9d/4d/7184806efda571887c798d573ca4134c80ac8642dcdd32f12c31b939c595/librt-0.8.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a3b4350b13cc0e6f5bec8fa7caf29a8fb8cdc051a3bae45cfbfd7ce64f009965", size = 68021, upload-time = "2026-02-17T16:11:26.129Z" }, + { url = "https://files.pythonhosted.org/packages/ae/88/c3c52d2a5d5101f28d3dc89298444626e7874aa904eed498464c2af17627/librt-0.8.1-cp311-cp311-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:ac1e7817fd0ed3d14fd7c5df91daed84c48e4c2a11ee99c0547f9f62fdae13da", size = 194500, upload-time = "2026-02-17T16:11:27.177Z" }, + { url = "https://files.pythonhosted.org/packages/d6/5d/6fb0a25b6a8906e85b2c3b87bee1d6ed31510be7605b06772f9374ca5cb3/librt-0.8.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:747328be0c5b7075cde86a0e09d7a9196029800ba75a1689332348e998fb85c0", size = 205622, upload-time = "2026-02-17T16:11:28.242Z" }, + { url = "https://files.pythonhosted.org/packages/b2/a6/8006ae81227105476a45691f5831499e4d936b1c049b0c1feb17c11b02d1/librt-0.8.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f0af2bd2bc204fa27f3d6711d0f360e6b8c684a035206257a81673ab924aa11e", size = 218304, upload-time = "2026-02-17T16:11:29.344Z" }, + { url = "https://files.pythonhosted.org/packages/ee/19/60e07886ad16670aae57ef44dada41912c90906a6fe9f2b9abac21374748/librt-0.8.1-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d480de377f5b687b6b1bc0c0407426da556e2a757633cc7e4d2e1a057aa688f3", size = 211493, upload-time = "2026-02-17T16:11:30.445Z" }, + { url = "https://files.pythonhosted.org/packages/9c/cf/f666c89d0e861d05600438213feeb818c7514d3315bae3648b1fc145d2b6/librt-0.8.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d0ee06b5b5291f609ddb37b9750985b27bc567791bc87c76a569b3feed8481ac", size = 219129, upload-time = "2026-02-17T16:11:32.021Z" }, + { url = "https://files.pythonhosted.org/packages/8f/ef/f1bea01e40b4a879364c031476c82a0dc69ce068daad67ab96302fed2d45/librt-0.8.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:9e2c6f77b9ad48ce5603b83b7da9ee3e36b3ab425353f695cba13200c5d96596", size = 213113, upload-time = "2026-02-17T16:11:33.192Z" }, + { url = "https://files.pythonhosted.org/packages/9b/80/cdab544370cc6bc1b72ea369525f547a59e6938ef6863a11ab3cd24759af/librt-0.8.1-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:439352ba9373f11cb8e1933da194dcc6206daf779ff8df0ed69c5e39113e6a99", size = 212269, upload-time = "2026-02-17T16:11:34.373Z" }, + { url = "https://files.pythonhosted.org/packages/9d/9c/48d6ed8dac595654f15eceab2035131c136d1ae9a1e3548e777bb6dbb95d/librt-0.8.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:82210adabbc331dbb65d7868b105185464ef13f56f7f76688565ad79f648b0fe", size = 234673, upload-time = "2026-02-17T16:11:36.063Z" }, + { url = "https://files.pythonhosted.org/packages/16/01/35b68b1db517f27a01be4467593292eb5315def8900afad29fabf56304ba/librt-0.8.1-cp311-cp311-win32.whl", hash = "sha256:52c224e14614b750c0a6d97368e16804a98c684657c7518752c356834fff83bb", size = 54597, upload-time = "2026-02-17T16:11:37.544Z" }, + { url = "https://files.pythonhosted.org/packages/71/02/796fe8f02822235966693f257bf2c79f40e11337337a657a8cfebba5febc/librt-0.8.1-cp311-cp311-win_amd64.whl", hash = "sha256:c00e5c884f528c9932d278d5c9cbbea38a6b81eb62c02e06ae53751a83a4d52b", size = 61733, upload-time = "2026-02-17T16:11:38.691Z" }, + { url = "https://files.pythonhosted.org/packages/28/ad/232e13d61f879a42a4e7117d65e4984bb28371a34bb6fb9ca54ec2c8f54e/librt-0.8.1-cp311-cp311-win_arm64.whl", hash = "sha256:f7cdf7f26c2286ffb02e46d7bac56c94655540b26347673bea15fa52a6af17e9", size = 52273, upload-time = "2026-02-17T16:11:40.308Z" }, + { url = "https://files.pythonhosted.org/packages/95/21/d39b0a87ac52fc98f621fb6f8060efb017a767ebbbac2f99fbcbc9ddc0d7/librt-0.8.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:a28f2612ab566b17f3698b0da021ff9960610301607c9a5e8eaca62f5e1c350a", size = 66516, upload-time = "2026-02-17T16:11:41.604Z" }, + { url = "https://files.pythonhosted.org/packages/69/f1/46375e71441c43e8ae335905e069f1c54febee63a146278bcee8782c84fd/librt-0.8.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:60a78b694c9aee2a0f1aaeaa7d101cf713e92e8423a941d2897f4fa37908dab9", size = 68634, upload-time = "2026-02-17T16:11:43.268Z" }, + { url = "https://files.pythonhosted.org/packages/0a/33/c510de7f93bf1fa19e13423a606d8189a02624a800710f6e6a0a0f0784b3/librt-0.8.1-cp312-cp312-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:758509ea3f1eba2a57558e7e98f4659d0ea7670bff49673b0dde18a3c7e6c0eb", size = 198941, upload-time = "2026-02-17T16:11:44.28Z" }, + { url = "https://files.pythonhosted.org/packages/dd/36/e725903416409a533d92398e88ce665476f275081d0d7d42f9c4951999e5/librt-0.8.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:039b9f2c506bd0ab0f8725aa5ba339c6f0cd19d3b514b50d134789809c24285d", size = 209991, upload-time = "2026-02-17T16:11:45.462Z" }, + { url = "https://files.pythonhosted.org/packages/30/7a/8d908a152e1875c9f8eac96c97a480df425e657cdb47854b9efaa4998889/librt-0.8.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5bb54f1205a3a6ab41a6fd71dfcdcbd278670d3a90ca502a30d9da583105b6f7", size = 224476, upload-time = "2026-02-17T16:11:46.542Z" }, + { url = "https://files.pythonhosted.org/packages/a8/b8/a22c34f2c485b8903a06f3fe3315341fe6876ef3599792344669db98fcff/librt-0.8.1-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:05bd41cdee35b0c59c259f870f6da532a2c5ca57db95b5f23689fcb5c9e42440", size = 217518, upload-time = "2026-02-17T16:11:47.746Z" }, + { url = "https://files.pythonhosted.org/packages/79/6f/5c6fea00357e4f82ba44f81dbfb027921f1ab10e320d4a64e1c408d035d9/librt-0.8.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:adfab487facf03f0d0857b8710cf82d0704a309d8ffc33b03d9302b4c64e91a9", size = 225116, upload-time = "2026-02-17T16:11:49.298Z" }, + { url = "https://files.pythonhosted.org/packages/f2/a0/95ced4e7b1267fe1e2720a111685bcddf0e781f7e9e0ce59d751c44dcfe5/librt-0.8.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:153188fe98a72f206042be10a2c6026139852805215ed9539186312d50a8e972", size = 217751, upload-time = "2026-02-17T16:11:50.49Z" }, + { url = "https://files.pythonhosted.org/packages/93/c2/0517281cb4d4101c27ab59472924e67f55e375bc46bedae94ac6dc6e1902/librt-0.8.1-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:dd3c41254ee98604b08bd5b3af5bf0a89740d4ee0711de95b65166bf44091921", size = 218378, upload-time = "2026-02-17T16:11:51.783Z" }, + { url = "https://files.pythonhosted.org/packages/43/e8/37b3ac108e8976888e559a7b227d0ceac03c384cfd3e7a1c2ee248dbae79/librt-0.8.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e0d138c7ae532908cbb342162b2611dbd4d90c941cd25ab82084aaf71d2c0bd0", size = 241199, upload-time = "2026-02-17T16:11:53.561Z" }, + { url = "https://files.pythonhosted.org/packages/4b/5b/35812d041c53967fedf551a39399271bbe4257e681236a2cf1a69c8e7fa1/librt-0.8.1-cp312-cp312-win32.whl", hash = "sha256:43353b943613c5d9c49a25aaffdba46f888ec354e71e3529a00cca3f04d66a7a", size = 54917, upload-time = "2026-02-17T16:11:54.758Z" }, + { url = "https://files.pythonhosted.org/packages/de/d1/fa5d5331b862b9775aaf2a100f5ef86854e5d4407f71bddf102f4421e034/librt-0.8.1-cp312-cp312-win_amd64.whl", hash = "sha256:ff8baf1f8d3f4b6b7257fcb75a501f2a5499d0dda57645baa09d4d0d34b19444", size = 62017, upload-time = "2026-02-17T16:11:55.748Z" }, + { url = "https://files.pythonhosted.org/packages/c7/7c/c614252f9acda59b01a66e2ddfd243ed1c7e1deab0293332dfbccf862808/librt-0.8.1-cp312-cp312-win_arm64.whl", hash = "sha256:0f2ae3725904f7377e11cc37722d5d401e8b3d5851fb9273d7f4fe04f6b3d37d", size = 52441, upload-time = "2026-02-17T16:11:56.801Z" }, + { url = "https://files.pythonhosted.org/packages/c5/3c/f614c8e4eaac7cbf2bbdf9528790b21d89e277ee20d57dc6e559c626105f/librt-0.8.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:7e6bad1cd94f6764e1e21950542f818a09316645337fd5ab9a7acc45d99a8f35", size = 66529, upload-time = "2026-02-17T16:11:57.809Z" }, + { url = "https://files.pythonhosted.org/packages/ab/96/5836544a45100ae411eda07d29e3d99448e5258b6e9c8059deb92945f5c2/librt-0.8.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cf450f498c30af55551ba4f66b9123b7185362ec8b625a773b3d39aa1a717583", size = 68669, upload-time = "2026-02-17T16:11:58.843Z" }, + { url = "https://files.pythonhosted.org/packages/06/53/f0b992b57af6d5531bf4677d75c44f095f2366a1741fb695ee462ae04b05/librt-0.8.1-cp313-cp313-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:eca45e982fa074090057132e30585a7e8674e9e885d402eae85633e9f449ce6c", size = 199279, upload-time = "2026-02-17T16:11:59.862Z" }, + { url = "https://files.pythonhosted.org/packages/f3/ad/4848cc16e268d14280d8168aee4f31cea92bbd2b79ce33d3e166f2b4e4fc/librt-0.8.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0c3811485fccfda840861905b8c70bba5ec094e02825598bb9d4ca3936857a04", size = 210288, upload-time = "2026-02-17T16:12:00.954Z" }, + { url = "https://files.pythonhosted.org/packages/52/05/27fdc2e95de26273d83b96742d8d3b7345f2ea2bdbd2405cc504644f2096/librt-0.8.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5e4af413908f77294605e28cfd98063f54b2c790561383971d2f52d113d9c363", size = 224809, upload-time = "2026-02-17T16:12:02.108Z" }, + { url = "https://files.pythonhosted.org/packages/7a/d0/78200a45ba3240cb042bc597d6f2accba9193a2c57d0356268cbbe2d0925/librt-0.8.1-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:5212a5bd7fae98dae95710032902edcd2ec4dc994e883294f75c857b83f9aba0", size = 218075, upload-time = "2026-02-17T16:12:03.631Z" }, + { url = "https://files.pythonhosted.org/packages/af/72/a210839fa74c90474897124c064ffca07f8d4b347b6574d309686aae7ca6/librt-0.8.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e692aa2d1d604e6ca12d35e51fdc36f4cda6345e28e36374579f7ef3611b3012", size = 225486, upload-time = "2026-02-17T16:12:04.725Z" }, + { url = "https://files.pythonhosted.org/packages/a3/c1/a03cc63722339ddbf087485f253493e2b013039f5b707e8e6016141130fa/librt-0.8.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:4be2a5c926b9770c9e08e717f05737a269b9d0ebc5d2f0060f0fe3fe9ce47acb", size = 218219, upload-time = "2026-02-17T16:12:05.828Z" }, + { url = "https://files.pythonhosted.org/packages/58/f5/fff6108af0acf941c6f274a946aea0e484bd10cd2dc37610287ce49388c5/librt-0.8.1-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:fd1a720332ea335ceb544cf0a03f81df92abd4bb887679fd1e460976b0e6214b", size = 218750, upload-time = "2026-02-17T16:12:07.09Z" }, + { url = "https://files.pythonhosted.org/packages/71/67/5a387bfef30ec1e4b4f30562c8586566faf87e47d696768c19feb49e3646/librt-0.8.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:93c2af9e01e0ef80d95ae3c720be101227edae5f2fe7e3dc63d8857fadfc5a1d", size = 241624, upload-time = "2026-02-17T16:12:08.43Z" }, + { url = "https://files.pythonhosted.org/packages/d4/be/24f8502db11d405232ac1162eb98069ca49c3306c1d75c6ccc61d9af8789/librt-0.8.1-cp313-cp313-win32.whl", hash = "sha256:086a32dbb71336627e78cc1d6ee305a68d038ef7d4c39aaff41ae8c9aa46e91a", size = 54969, upload-time = "2026-02-17T16:12:09.633Z" }, + { url = "https://files.pythonhosted.org/packages/5c/73/c9fdf6cb2a529c1a092ce769a12d88c8cca991194dfe641b6af12fa964d2/librt-0.8.1-cp313-cp313-win_amd64.whl", hash = "sha256:e11769a1dbda4da7b00a76cfffa67aa47cfa66921d2724539eee4b9ede780b79", size = 62000, upload-time = "2026-02-17T16:12:10.632Z" }, + { url = "https://files.pythonhosted.org/packages/d3/97/68f80ca3ac4924f250cdfa6e20142a803e5e50fca96ef5148c52ee8c10ea/librt-0.8.1-cp313-cp313-win_arm64.whl", hash = "sha256:924817ab3141aca17893386ee13261f1d100d1ef410d70afe4389f2359fea4f0", size = 52495, upload-time = "2026-02-17T16:12:11.633Z" }, + { url = "https://files.pythonhosted.org/packages/c9/6a/907ef6800f7bca71b525a05f1839b21f708c09043b1c6aa77b6b827b3996/librt-0.8.1-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:6cfa7fe54fd4d1f47130017351a959fe5804bda7a0bc7e07a2cdbc3fdd28d34f", size = 66081, upload-time = "2026-02-17T16:12:12.766Z" }, + { url = "https://files.pythonhosted.org/packages/1b/18/25e991cd5640c9fb0f8d91b18797b29066b792f17bf8493da183bf5caabe/librt-0.8.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:228c2409c079f8c11fb2e5d7b277077f694cb93443eb760e00b3b83cb8b3176c", size = 68309, upload-time = "2026-02-17T16:12:13.756Z" }, + { url = "https://files.pythonhosted.org/packages/a4/36/46820d03f058cfb5a9de5940640ba03165ed8aded69e0733c417bb04df34/librt-0.8.1-cp314-cp314-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:7aae78ab5e3206181780e56912d1b9bb9f90a7249ce12f0e8bf531d0462dd0fc", size = 196804, upload-time = "2026-02-17T16:12:14.818Z" }, + { url = "https://files.pythonhosted.org/packages/59/18/5dd0d3b87b8ff9c061849fbdb347758d1f724b9a82241aa908e0ec54ccd0/librt-0.8.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:172d57ec04346b047ca6af181e1ea4858086c80bdf455f61994c4aa6fc3f866c", size = 206907, upload-time = "2026-02-17T16:12:16.513Z" }, + { url = "https://files.pythonhosted.org/packages/d1/96/ef04902aad1424fd7299b62d1890e803e6ab4018c3044dca5922319c4b97/librt-0.8.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6b1977c4ea97ce5eb7755a78fae68d87e4102e4aaf54985e8b56806849cc06a3", size = 221217, upload-time = "2026-02-17T16:12:17.906Z" }, + { url = "https://files.pythonhosted.org/packages/6d/ff/7e01f2dda84a8f5d280637a2e5827210a8acca9a567a54507ef1c75b342d/librt-0.8.1-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:10c42e1f6fd06733ef65ae7bebce2872bcafd8d6e6b0a08fe0a05a23b044fb14", size = 214622, upload-time = "2026-02-17T16:12:19.108Z" }, + { url = "https://files.pythonhosted.org/packages/1e/8c/5b093d08a13946034fed57619742f790faf77058558b14ca36a6e331161e/librt-0.8.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:4c8dfa264b9193c4ee19113c985c95f876fae5e51f731494fc4e0cf594990ba7", size = 221987, upload-time = "2026-02-17T16:12:20.331Z" }, + { url = "https://files.pythonhosted.org/packages/d3/cc/86b0b3b151d40920ad45a94ce0171dec1aebba8a9d72bb3fa00c73ab25dd/librt-0.8.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:01170b6729a438f0dedc4a26ed342e3dc4f02d1000b4b19f980e1877f0c297e6", size = 215132, upload-time = "2026-02-17T16:12:21.54Z" }, + { url = "https://files.pythonhosted.org/packages/fc/be/8588164a46edf1e69858d952654e216a9a91174688eeefb9efbb38a9c799/librt-0.8.1-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:7b02679a0d783bdae30d443025b94465d8c3dc512f32f5b5031f93f57ac32071", size = 215195, upload-time = "2026-02-17T16:12:23.073Z" }, + { url = "https://files.pythonhosted.org/packages/f5/f2/0b9279bea735c734d69344ecfe056c1ba211694a72df10f568745c899c76/librt-0.8.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:190b109bb69592a3401fe1ffdea41a2e73370ace2ffdc4a0e8e2b39cdea81b78", size = 237946, upload-time = "2026-02-17T16:12:24.275Z" }, + { url = "https://files.pythonhosted.org/packages/e9/cc/5f2a34fbc8aeb35314a3641f9956fa9051a947424652fad9882be7a97949/librt-0.8.1-cp314-cp314-win32.whl", hash = "sha256:e70a57ecf89a0f64c24e37f38d3fe217a58169d2fe6ed6d70554964042474023", size = 50689, upload-time = "2026-02-17T16:12:25.766Z" }, + { url = "https://files.pythonhosted.org/packages/a0/76/cd4d010ab2147339ca2b93e959c3686e964edc6de66ddacc935c325883d7/librt-0.8.1-cp314-cp314-win_amd64.whl", hash = "sha256:7e2f3edca35664499fbb36e4770650c4bd4a08abc1f4458eab9df4ec56389730", size = 57875, upload-time = "2026-02-17T16:12:27.465Z" }, + { url = "https://files.pythonhosted.org/packages/84/0f/2143cb3c3ca48bd3379dcd11817163ca50781927c4537345d608b5045998/librt-0.8.1-cp314-cp314-win_arm64.whl", hash = "sha256:0d2f82168e55ddefd27c01c654ce52379c0750ddc31ee86b4b266bcf4d65f2a3", size = 48058, upload-time = "2026-02-17T16:12:28.556Z" }, + { url = "https://files.pythonhosted.org/packages/d2/0e/9b23a87e37baf00311c3efe6b48d6b6c168c29902dfc3f04c338372fd7db/librt-0.8.1-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:2c74a2da57a094bd48d03fa5d196da83d2815678385d2978657499063709abe1", size = 68313, upload-time = "2026-02-17T16:12:29.659Z" }, + { url = "https://files.pythonhosted.org/packages/db/9a/859c41e5a4f1c84200a7d2b92f586aa27133c8243b6cac9926f6e54d01b9/librt-0.8.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a355d99c4c0d8e5b770313b8b247411ed40949ca44e33e46a4789b9293a907ee", size = 70994, upload-time = "2026-02-17T16:12:31.516Z" }, + { url = "https://files.pythonhosted.org/packages/4c/28/10605366ee599ed34223ac2bf66404c6fb59399f47108215d16d5ad751a8/librt-0.8.1-cp314-cp314t-manylinux1_i686.manylinux_2_28_i686.manylinux_2_5_i686.whl", hash = "sha256:2eb345e8b33fb748227409c9f1233d4df354d6e54091f0e8fc53acdb2ffedeb7", size = 220770, upload-time = "2026-02-17T16:12:33.294Z" }, + { url = "https://files.pythonhosted.org/packages/af/8d/16ed8fd452dafae9c48d17a6bc1ee3e818fd40ef718d149a8eff2c9f4ea2/librt-0.8.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9be2f15e53ce4e83cc08adc29b26fb5978db62ef2a366fbdf716c8a6c8901040", size = 235409, upload-time = "2026-02-17T16:12:35.443Z" }, + { url = "https://files.pythonhosted.org/packages/89/1b/7bdf3e49349c134b25db816e4a3db6b94a47ac69d7d46b1e682c2c4949be/librt-0.8.1-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:785ae29c1f5c6e7c2cde2c7c0e148147f4503da3abc5d44d482068da5322fd9e", size = 246473, upload-time = "2026-02-17T16:12:36.656Z" }, + { url = "https://files.pythonhosted.org/packages/4e/8a/91fab8e4fd2a24930a17188c7af5380eb27b203d72101c9cc000dbdfd95a/librt-0.8.1-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:1d3a7da44baf692f0c6aeb5b2a09c5e6fc7a703bca9ffa337ddd2e2da53f7732", size = 238866, upload-time = "2026-02-17T16:12:37.849Z" }, + { url = "https://files.pythonhosted.org/packages/b9/e0/c45a098843fc7c07e18a7f8a24ca8496aecbf7bdcd54980c6ca1aaa79a8e/librt-0.8.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5fc48998000cbc39ec0d5311312dda93ecf92b39aaf184c5e817d5d440b29624", size = 250248, upload-time = "2026-02-17T16:12:39.445Z" }, + { url = "https://files.pythonhosted.org/packages/82/30/07627de23036640c952cce0c1fe78972e77d7d2f8fd54fa5ef4554ff4a56/librt-0.8.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:e96baa6820280077a78244b2e06e416480ed859bbd8e5d641cf5742919d8beb4", size = 240629, upload-time = "2026-02-17T16:12:40.889Z" }, + { url = "https://files.pythonhosted.org/packages/fb/c1/55bfe1ee3542eba055616f9098eaf6eddb966efb0ca0f44eaa4aba327307/librt-0.8.1-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:31362dbfe297b23590530007062c32c6f6176f6099646bb2c95ab1b00a57c382", size = 239615, upload-time = "2026-02-17T16:12:42.446Z" }, + { url = "https://files.pythonhosted.org/packages/2b/39/191d3d28abc26c9099b19852e6c99f7f6d400b82fa5a4e80291bd3803e19/librt-0.8.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:cc3656283d11540ab0ea01978378e73e10002145117055e03722417aeab30994", size = 263001, upload-time = "2026-02-17T16:12:43.627Z" }, + { url = "https://files.pythonhosted.org/packages/b9/eb/7697f60fbe7042ab4e88f4ee6af496b7f222fffb0a4e3593ef1f29f81652/librt-0.8.1-cp314-cp314t-win32.whl", hash = "sha256:738f08021b3142c2918c03692608baed43bc51144c29e35807682f8070ee2a3a", size = 51328, upload-time = "2026-02-17T16:12:45.148Z" }, + { url = "https://files.pythonhosted.org/packages/7c/72/34bf2eb7a15414a23e5e70ecb9440c1d3179f393d9349338a91e2781c0fb/librt-0.8.1-cp314-cp314t-win_amd64.whl", hash = "sha256:89815a22daf9c51884fb5dbe4f1ef65ee6a146e0b6a8df05f753e2e4a9359bf4", size = 58722, upload-time = "2026-02-17T16:12:46.85Z" }, + { url = "https://files.pythonhosted.org/packages/b2/c8/d148e041732d631fc76036f8b30fae4e77b027a1e95b7a84bb522481a940/librt-0.8.1-cp314-cp314t-win_arm64.whl", hash = "sha256:bf512a71a23504ed08103a13c941f763db13fb11177beb3d9244c98c29fb4a61", size = 48755, upload-time = "2026-02-17T16:12:47.943Z" }, +] + +[[package]] +name = "mypy" +version = "1.19.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "librt", marker = "platform_python_implementation != 'PyPy'" }, + { name = "mypy-extensions" }, + { name = "pathspec" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f5/db/4efed9504bc01309ab9c2da7e352cc223569f05478012b5d9ece38fd44d2/mypy-1.19.1.tar.gz", hash = "sha256:19d88bb05303fe63f71dd2c6270daca27cb9401c4ca8255fe50d1d920e0eb9ba", size = 3582404, upload-time = "2025-12-15T05:03:48.42Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ef/47/6b3ebabd5474d9cdc170d1342fbf9dddc1b0ec13ec90bf9004ee6f391c31/mypy-1.19.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d8dfc6ab58ca7dda47d9237349157500468e404b17213d44fc1cb77bce532288", size = 13028539, upload-time = "2025-12-15T05:03:44.129Z" }, + { url = "https://files.pythonhosted.org/packages/5c/a6/ac7c7a88a3c9c54334f53a941b765e6ec6c4ebd65d3fe8cdcfbe0d0fd7db/mypy-1.19.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e3f276d8493c3c97930e354b2595a44a21348b320d859fb4a2b9f66da9ed27ab", size = 12083163, upload-time = "2025-12-15T05:03:37.679Z" }, + { url = "https://files.pythonhosted.org/packages/67/af/3afa9cf880aa4a2c803798ac24f1d11ef72a0c8079689fac5cfd815e2830/mypy-1.19.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2abb24cf3f17864770d18d673c85235ba52456b36a06b6afc1e07c1fdcd3d0e6", size = 12687629, upload-time = "2025-12-15T05:02:31.526Z" }, + { url = "https://files.pythonhosted.org/packages/2d/46/20f8a7114a56484ab268b0ab372461cb3a8f7deed31ea96b83a4e4cfcfca/mypy-1.19.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a009ffa5a621762d0c926a078c2d639104becab69e79538a494bcccb62cc0331", size = 13436933, upload-time = "2025-12-15T05:03:15.606Z" }, + { url = "https://files.pythonhosted.org/packages/5b/f8/33b291ea85050a21f15da910002460f1f445f8007adb29230f0adea279cb/mypy-1.19.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f7cee03c9a2e2ee26ec07479f38ea9c884e301d42c6d43a19d20fb014e3ba925", size = 13661754, upload-time = "2025-12-15T05:02:26.731Z" }, + { url = "https://files.pythonhosted.org/packages/fd/a3/47cbd4e85bec4335a9cd80cf67dbc02be21b5d4c9c23ad6b95d6c5196bac/mypy-1.19.1-cp311-cp311-win_amd64.whl", hash = "sha256:4b84a7a18f41e167f7995200a1d07a4a6810e89d29859df936f1c3923d263042", size = 10055772, upload-time = "2025-12-15T05:03:26.179Z" }, + { url = "https://files.pythonhosted.org/packages/06/8a/19bfae96f6615aa8a0604915512e0289b1fad33d5909bf7244f02935d33a/mypy-1.19.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:a8174a03289288c1f6c46d55cef02379b478bfbc8e358e02047487cad44c6ca1", size = 13206053, upload-time = "2025-12-15T05:03:46.622Z" }, + { url = "https://files.pythonhosted.org/packages/a5/34/3e63879ab041602154ba2a9f99817bb0c85c4df19a23a1443c8986e4d565/mypy-1.19.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ffcebe56eb09ff0c0885e750036a095e23793ba6c2e894e7e63f6d89ad51f22e", size = 12219134, upload-time = "2025-12-15T05:03:24.367Z" }, + { url = "https://files.pythonhosted.org/packages/89/cc/2db6f0e95366b630364e09845672dbee0cbf0bbe753a204b29a944967cd9/mypy-1.19.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b64d987153888790bcdb03a6473d321820597ab8dd9243b27a92153c4fa50fd2", size = 12731616, upload-time = "2025-12-15T05:02:44.725Z" }, + { url = "https://files.pythonhosted.org/packages/00/be/dd56c1fd4807bc1eba1cf18b2a850d0de7bacb55e158755eb79f77c41f8e/mypy-1.19.1-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c35d298c2c4bba75feb2195655dfea8124d855dfd7343bf8b8c055421eaf0cf8", size = 13620847, upload-time = "2025-12-15T05:03:39.633Z" }, + { url = "https://files.pythonhosted.org/packages/6d/42/332951aae42b79329f743bf1da088cd75d8d4d9acc18fbcbd84f26c1af4e/mypy-1.19.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:34c81968774648ab5ac09c29a375fdede03ba253f8f8287847bd480782f73a6a", size = 13834976, upload-time = "2025-12-15T05:03:08.786Z" }, + { url = "https://files.pythonhosted.org/packages/6f/63/e7493e5f90e1e085c562bb06e2eb32cae27c5057b9653348d38b47daaecc/mypy-1.19.1-cp312-cp312-win_amd64.whl", hash = "sha256:b10e7c2cd7870ba4ad9b2d8a6102eb5ffc1f16ca35e3de6bfa390c1113029d13", size = 10118104, upload-time = "2025-12-15T05:03:10.834Z" }, + { url = "https://files.pythonhosted.org/packages/de/9f/a6abae693f7a0c697dbb435aac52e958dc8da44e92e08ba88d2e42326176/mypy-1.19.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e3157c7594ff2ef1634ee058aafc56a82db665c9438fd41b390f3bde1ab12250", size = 13201927, upload-time = "2025-12-15T05:02:29.138Z" }, + { url = "https://files.pythonhosted.org/packages/9a/a4/45c35ccf6e1c65afc23a069f50e2c66f46bd3798cbe0d680c12d12935caa/mypy-1.19.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:bdb12f69bcc02700c2b47e070238f42cb87f18c0bc1fc4cdb4fb2bc5fd7a3b8b", size = 12206730, upload-time = "2025-12-15T05:03:01.325Z" }, + { url = "https://files.pythonhosted.org/packages/05/bb/cdcf89678e26b187650512620eec8368fded4cfd99cfcb431e4cdfd19dec/mypy-1.19.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f859fb09d9583a985be9a493d5cfc5515b56b08f7447759a0c5deaf68d80506e", size = 12724581, upload-time = "2025-12-15T05:03:20.087Z" }, + { url = "https://files.pythonhosted.org/packages/d1/32/dd260d52babf67bad8e6770f8e1102021877ce0edea106e72df5626bb0ec/mypy-1.19.1-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c9a6538e0415310aad77cb94004ca6482330fece18036b5f360b62c45814c4ef", size = 13616252, upload-time = "2025-12-15T05:02:49.036Z" }, + { url = "https://files.pythonhosted.org/packages/71/d0/5e60a9d2e3bd48432ae2b454b7ef2b62a960ab51292b1eda2a95edd78198/mypy-1.19.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:da4869fc5e7f62a88f3fe0b5c919d1d9f7ea3cef92d3689de2823fd27e40aa75", size = 13840848, upload-time = "2025-12-15T05:02:55.95Z" }, + { url = "https://files.pythonhosted.org/packages/98/76/d32051fa65ecf6cc8c6610956473abdc9b4c43301107476ac03559507843/mypy-1.19.1-cp313-cp313-win_amd64.whl", hash = "sha256:016f2246209095e8eda7538944daa1d60e1e8134d98983b9fc1e92c1fc0cb8dd", size = 10135510, upload-time = "2025-12-15T05:02:58.438Z" }, + { url = "https://files.pythonhosted.org/packages/de/eb/b83e75f4c820c4247a58580ef86fcd35165028f191e7e1ba57128c52782d/mypy-1.19.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:06e6170bd5836770e8104c8fdd58e5e725cfeb309f0a6c681a811f557e97eac1", size = 13199744, upload-time = "2025-12-15T05:03:30.823Z" }, + { url = "https://files.pythonhosted.org/packages/94/28/52785ab7bfa165f87fcbb61547a93f98bb20e7f82f90f165a1f69bce7b3d/mypy-1.19.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:804bd67b8054a85447c8954215a906d6eff9cabeabe493fb6334b24f4bfff718", size = 12215815, upload-time = "2025-12-15T05:02:42.323Z" }, + { url = "https://files.pythonhosted.org/packages/0a/c6/bdd60774a0dbfb05122e3e925f2e9e846c009e479dcec4821dad881f5b52/mypy-1.19.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:21761006a7f497cb0d4de3d8ef4ca70532256688b0523eee02baf9eec895e27b", size = 12740047, upload-time = "2025-12-15T05:03:33.168Z" }, + { url = "https://files.pythonhosted.org/packages/32/2a/66ba933fe6c76bd40d1fe916a83f04fed253152f451a877520b3c4a5e41e/mypy-1.19.1-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:28902ee51f12e0f19e1e16fbe2f8f06b6637f482c459dd393efddd0ec7f82045", size = 13601998, upload-time = "2025-12-15T05:03:13.056Z" }, + { url = "https://files.pythonhosted.org/packages/e3/da/5055c63e377c5c2418760411fd6a63ee2b96cf95397259038756c042574f/mypy-1.19.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:481daf36a4c443332e2ae9c137dfee878fcea781a2e3f895d54bd3002a900957", size = 13807476, upload-time = "2025-12-15T05:03:17.977Z" }, + { url = "https://files.pythonhosted.org/packages/cd/09/4ebd873390a063176f06b0dbf1f7783dd87bd120eae7727fa4ae4179b685/mypy-1.19.1-cp314-cp314-win_amd64.whl", hash = "sha256:8bb5c6f6d043655e055be9b542aa5f3bdd30e4f3589163e85f93f3640060509f", size = 10281872, upload-time = "2025-12-15T05:03:05.549Z" }, + { url = "https://files.pythonhosted.org/packages/8d/f4/4ce9a05ce5ded1de3ec1c1d96cf9f9504a04e54ce0ed55cfa38619a32b8d/mypy-1.19.1-py3-none-any.whl", hash = "sha256:f1235f5ea01b7db5468d53ece6aaddf1ad0b88d9e7462b86ef96fe04995d7247", size = 2471239, upload-time = "2025-12-15T05:03:07.248Z" }, +] + +[[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 = "numpy" +version = "2.4.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/10/8b/c265f4823726ab832de836cdd184d0986dcf94480f81e8739692a7ac7af2/numpy-2.4.3.tar.gz", hash = "sha256:483a201202b73495f00dbc83796c6ae63137a9bdade074f7648b3e32613412dd", size = 20727743, upload-time = "2026-03-09T07:58:53.426Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f9/51/5093a2df15c4dc19da3f79d1021e891f5dcf1d9d1db6ba38891d5590f3fe/numpy-2.4.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:33b3bf58ee84b172c067f56aeadc7ee9ab6de69c5e800ab5b10295d54c581adb", size = 16957183, upload-time = "2026-03-09T07:55:57.774Z" }, + { url = "https://files.pythonhosted.org/packages/b5/7c/c061f3de0630941073d2598dc271ac2f6cbcf5c83c74a5870fea07488333/numpy-2.4.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:8ba7b51e71c05aa1f9bc3641463cd82308eab40ce0d5c7e1fd4038cbf9938147", size = 14968734, upload-time = "2026-03-09T07:56:00.494Z" }, + { url = "https://files.pythonhosted.org/packages/ef/27/d26c85cbcd86b26e4f125b0668e7a7c0542d19dd7d23ee12e87b550e95b5/numpy-2.4.3-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:a1988292870c7cb9d0ebb4cc96b4d447513a9644801de54606dc7aabf2b7d920", size = 5475288, upload-time = "2026-03-09T07:56:02.857Z" }, + { url = "https://files.pythonhosted.org/packages/2b/09/3c4abbc1dcd8010bf1a611d174c7aa689fc505585ec806111b4406f6f1b1/numpy-2.4.3-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:23b46bb6d8ecb68b58c09944483c135ae5f0e9b8d8858ece5e4ead783771d2a9", size = 6805253, upload-time = "2026-03-09T07:56:04.53Z" }, + { url = "https://files.pythonhosted.org/packages/21/bc/e7aa3f6817e40c3f517d407742337cbb8e6fc4b83ce0b55ab780c829243b/numpy-2.4.3-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a016db5c5dba78fa8fe9f5d80d6708f9c42ab087a739803c0ac83a43d686a470", size = 15969479, upload-time = "2026-03-09T07:56:06.638Z" }, + { url = "https://files.pythonhosted.org/packages/78/51/9f5d7a41f0b51649ddf2f2320595e15e122a40610b233d51928dd6c92353/numpy-2.4.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:715de7f82e192e8cae5a507a347d97ad17598f8e026152ca97233e3666daaa71", size = 16901035, upload-time = "2026-03-09T07:56:09.405Z" }, + { url = "https://files.pythonhosted.org/packages/64/6e/b221dd847d7181bc5ee4857bfb026182ef69499f9305eb1371cbb1aea626/numpy-2.4.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2ddb7919366ee468342b91dea2352824c25b55814a987847b6c52003a7c97f15", size = 17325657, upload-time = "2026-03-09T07:56:12.067Z" }, + { url = "https://files.pythonhosted.org/packages/eb/b8/8f3fd2da596e1063964b758b5e3c970aed1949a05200d7e3d46a9d46d643/numpy-2.4.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:a315e5234d88067f2d97e1f2ef670a7569df445d55400f1e33d117418d008d52", size = 18635512, upload-time = "2026-03-09T07:56:14.629Z" }, + { url = "https://files.pythonhosted.org/packages/5c/24/2993b775c37e39d2f8ab4125b44337ab0b2ba106c100980b7c274a22bee7/numpy-2.4.3-cp311-cp311-win32.whl", hash = "sha256:2b3f8d2c4589b1a2028d2a770b0fc4d1f332fb5e01521f4de3199a896d158ddd", size = 6238100, upload-time = "2026-03-09T07:56:17.243Z" }, + { url = "https://files.pythonhosted.org/packages/76/1d/edccf27adedb754db7c4511d5eac8b83f004ae948fe2d3509e8b78097d4c/numpy-2.4.3-cp311-cp311-win_amd64.whl", hash = "sha256:77e76d932c49a75617c6d13464e41203cd410956614d0a0e999b25e9e8d27eec", size = 12609816, upload-time = "2026-03-09T07:56:19.089Z" }, + { url = "https://files.pythonhosted.org/packages/92/82/190b99153480076c8dce85f4cfe7d53ea84444145ffa54cb58dcd460d66b/numpy-2.4.3-cp311-cp311-win_arm64.whl", hash = "sha256:eb610595dd91560905c132c709412b512135a60f1851ccbd2c959e136431ff67", size = 10485757, upload-time = "2026-03-09T07:56:21.753Z" }, + { url = "https://files.pythonhosted.org/packages/a9/ed/6388632536f9788cea23a3a1b629f25b43eaacd7d7377e5d6bc7b9deb69b/numpy-2.4.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:61b0cbabbb6126c8df63b9a3a0c4b1f44ebca5e12ff6997b80fcf267fb3150ef", size = 16669628, upload-time = "2026-03-09T07:56:24.252Z" }, + { url = "https://files.pythonhosted.org/packages/74/1b/ee2abfc68e1ce728b2958b6ba831d65c62e1b13ce3017c13943f8f9b5b2e/numpy-2.4.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:7395e69ff32526710748f92cd8c9849b361830968ea3e24a676f272653e8983e", size = 14696872, upload-time = "2026-03-09T07:56:26.991Z" }, + { url = "https://files.pythonhosted.org/packages/ba/d1/780400e915ff5638166f11ca9dc2c5815189f3d7cf6f8759a1685e586413/numpy-2.4.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:abdce0f71dcb4a00e4e77f3faf05e4616ceccfe72ccaa07f47ee79cda3b7b0f4", size = 5203489, upload-time = "2026-03-09T07:56:29.414Z" }, + { url = "https://files.pythonhosted.org/packages/0b/bb/baffa907e9da4cc34a6e556d6d90e032f6d7a75ea47968ea92b4858826c4/numpy-2.4.3-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:48da3a4ee1336454b07497ff7ec83903efa5505792c4e6d9bf83d99dc07a1e18", size = 6550814, upload-time = "2026-03-09T07:56:32.225Z" }, + { url = "https://files.pythonhosted.org/packages/7b/12/8c9f0c6c95f76aeb20fc4a699c33e9f827fa0d0f857747c73bb7b17af945/numpy-2.4.3-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:32e3bef222ad6b052280311d1d60db8e259e4947052c3ae7dd6817451fc8a4c5", size = 15666601, upload-time = "2026-03-09T07:56:34.461Z" }, + { url = "https://files.pythonhosted.org/packages/bd/79/cc665495e4d57d0aa6fbcc0aa57aa82671dfc78fbf95fe733ed86d98f52a/numpy-2.4.3-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e7dd01a46700b1967487141a66ac1a3cf0dd8ebf1f08db37d46389401512ca97", size = 16621358, upload-time = "2026-03-09T07:56:36.852Z" }, + { url = "https://files.pythonhosted.org/packages/a8/40/b4ecb7224af1065c3539f5ecfff879d090de09608ad1008f02c05c770cb3/numpy-2.4.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:76f0f283506c28b12bba319c0fab98217e9f9b54e6160e9c79e9f7348ba32e9c", size = 17016135, upload-time = "2026-03-09T07:56:39.337Z" }, + { url = "https://files.pythonhosted.org/packages/f7/b1/6a88e888052eed951afed7a142dcdf3b149a030ca59b4c71eef085858e43/numpy-2.4.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:737f630a337364665aba3b5a77e56a68cc42d350edd010c345d65a3efa3addcc", size = 18345816, upload-time = "2026-03-09T07:56:42.31Z" }, + { url = "https://files.pythonhosted.org/packages/f3/8f/103a60c5f8c3d7fc678c19cd7b2476110da689ccb80bc18050efbaeae183/numpy-2.4.3-cp312-cp312-win32.whl", hash = "sha256:26952e18d82a1dbbc2f008d402021baa8d6fc8e84347a2072a25e08b46d698b9", size = 5960132, upload-time = "2026-03-09T07:56:44.851Z" }, + { url = "https://files.pythonhosted.org/packages/d7/7c/f5ee1bf6ed888494978046a809df2882aad35d414b622893322df7286879/numpy-2.4.3-cp312-cp312-win_amd64.whl", hash = "sha256:65f3c2455188f09678355f5cae1f959a06b778bc66d535da07bf2ef20cd319d5", size = 12316144, upload-time = "2026-03-09T07:56:47.057Z" }, + { url = "https://files.pythonhosted.org/packages/71/46/8d1cb3f7a00f2fb6394140e7e6623696e54c6318a9d9691bb4904672cf42/numpy-2.4.3-cp312-cp312-win_arm64.whl", hash = "sha256:2abad5c7fef172b3377502bde47892439bae394a71bc329f31df0fd829b41a9e", size = 10220364, upload-time = "2026-03-09T07:56:49.849Z" }, + { url = "https://files.pythonhosted.org/packages/b6/d0/1fe47a98ce0df229238b77611340aff92d52691bcbc10583303181abf7fc/numpy-2.4.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b346845443716c8e542d54112966383b448f4a3ba5c66409771b8c0889485dd3", size = 16665297, upload-time = "2026-03-09T07:56:52.296Z" }, + { url = "https://files.pythonhosted.org/packages/27/d9/4e7c3f0e68dfa91f21c6fb6cf839bc829ec920688b1ce7ec722b1a6202fb/numpy-2.4.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2629289168f4897a3c4e23dc98d6f1731f0fc0fe52fb9db19f974041e4cc12b9", size = 14691853, upload-time = "2026-03-09T07:56:54.992Z" }, + { url = "https://files.pythonhosted.org/packages/3a/66/bd096b13a87549683812b53ab211e6d413497f84e794fb3c39191948da97/numpy-2.4.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:bb2e3cf95854233799013779216c57e153c1ee67a0bf92138acca0e429aefaee", size = 5198435, upload-time = "2026-03-09T07:56:57.184Z" }, + { url = "https://files.pythonhosted.org/packages/a2/2f/687722910b5a5601de2135c891108f51dfc873d8e43c8ed9f4ebb440b4a2/numpy-2.4.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:7f3408ff897f8ab07a07fbe2823d7aee6ff644c097cc1f90382511fe982f647f", size = 6546347, upload-time = "2026-03-09T07:56:59.531Z" }, + { url = "https://files.pythonhosted.org/packages/bf/ec/7971c4e98d86c564750393fab8d7d83d0a9432a9d78bb8a163a6dc59967a/numpy-2.4.3-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:decb0eb8a53c3b009b0962378065589685d66b23467ef5dac16cbe818afde27f", size = 15664626, upload-time = "2026-03-09T07:57:01.385Z" }, + { url = "https://files.pythonhosted.org/packages/7e/eb/7daecbea84ec935b7fc732e18f532073064a3816f0932a40a17f3349185f/numpy-2.4.3-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d5f51900414fc9204a0e0da158ba2ac52b75656e7dce7e77fb9f84bfa343b4cc", size = 16608916, upload-time = "2026-03-09T07:57:04.008Z" }, + { url = "https://files.pythonhosted.org/packages/df/58/2a2b4a817ffd7472dca4421d9f0776898b364154e30c95f42195041dc03b/numpy-2.4.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6bd06731541f89cdc01b261ba2c9e037f1543df7472517836b78dfb15bd6e476", size = 17015824, upload-time = "2026-03-09T07:57:06.347Z" }, + { url = "https://files.pythonhosted.org/packages/4a/ca/627a828d44e78a418c55f82dd4caea8ea4a8ef24e5144d9e71016e52fb40/numpy-2.4.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:22654fe6be0e5206f553a9250762c653d3698e46686eee53b399ab90da59bd92", size = 18334581, upload-time = "2026-03-09T07:57:09.114Z" }, + { url = "https://files.pythonhosted.org/packages/cd/c0/76f93962fc79955fcba30a429b62304332345f22d4daec1cb33653425643/numpy-2.4.3-cp313-cp313-win32.whl", hash = "sha256:d71e379452a2f670ccb689ec801b1218cd3983e253105d6e83780967e899d687", size = 5958618, upload-time = "2026-03-09T07:57:11.432Z" }, + { url = "https://files.pythonhosted.org/packages/b1/3c/88af0040119209b9b5cb59485fa48b76f372c73068dbf9254784b975ac53/numpy-2.4.3-cp313-cp313-win_amd64.whl", hash = "sha256:0a60e17a14d640f49146cb38e3f105f571318db7826d9b6fef7e4dce758faecd", size = 12312824, upload-time = "2026-03-09T07:57:13.586Z" }, + { url = "https://files.pythonhosted.org/packages/58/ce/3d07743aced3d173f877c3ef6a454c2174ba42b584ab0b7e6d99374f51ed/numpy-2.4.3-cp313-cp313-win_arm64.whl", hash = "sha256:c9619741e9da2059cd9c3f206110b97583c7152c1dc9f8aafd4beb450ac1c89d", size = 10221218, upload-time = "2026-03-09T07:57:16.183Z" }, + { url = "https://files.pythonhosted.org/packages/62/09/d96b02a91d09e9d97862f4fc8bfebf5400f567d8eb1fe4b0cc4795679c15/numpy-2.4.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:7aa4e54f6469300ebca1d9eb80acd5253cdfa36f2c03d79a35883687da430875", size = 14819570, upload-time = "2026-03-09T07:57:18.564Z" }, + { url = "https://files.pythonhosted.org/packages/b5/ca/0b1aba3905fdfa3373d523b2b15b19029f4f3031c87f4066bd9d20ef6c6b/numpy-2.4.3-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:d1b90d840b25874cf5cd20c219af10bac3667db3876d9a495609273ebe679070", size = 5326113, upload-time = "2026-03-09T07:57:21.052Z" }, + { url = "https://files.pythonhosted.org/packages/c0/63/406e0fd32fcaeb94180fd6a4c41e55736d676c54346b7efbce548b94a914/numpy-2.4.3-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:a749547700de0a20a6718293396ec237bb38218049cfce788e08fcb716e8cf73", size = 6646370, upload-time = "2026-03-09T07:57:22.804Z" }, + { url = "https://files.pythonhosted.org/packages/b6/d0/10f7dc157d4b37af92720a196be6f54f889e90dcd30dce9dc657ed92c257/numpy-2.4.3-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:94f3c4a151a2e529adf49c1d54f0f57ff8f9b233ee4d44af623a81553ab86368", size = 15723499, upload-time = "2026-03-09T07:57:24.693Z" }, + { url = "https://files.pythonhosted.org/packages/66/f1/d1c2bf1161396629701bc284d958dc1efa3a5a542aab83cf11ee6eb4cba5/numpy-2.4.3-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:22c31dc07025123aedf7f2db9e91783df13f1776dc52c6b22c620870dc0fab22", size = 16657164, upload-time = "2026-03-09T07:57:27.676Z" }, + { url = "https://files.pythonhosted.org/packages/1a/be/cca19230b740af199ac47331a21c71e7a3d0ba59661350483c1600d28c37/numpy-2.4.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:148d59127ac95979d6f07e4d460f934ebdd6eed641db9c0db6c73026f2b2101a", size = 17081544, upload-time = "2026-03-09T07:57:30.664Z" }, + { url = "https://files.pythonhosted.org/packages/b9/c5/9602b0cbb703a0936fb40f8a95407e8171935b15846de2f0776e08af04c7/numpy-2.4.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a97cbf7e905c435865c2d939af3d93f99d18eaaa3cabe4256f4304fb51604349", size = 18380290, upload-time = "2026-03-09T07:57:33.763Z" }, + { url = "https://files.pythonhosted.org/packages/ed/81/9f24708953cd30be9ee36ec4778f4b112b45165812f2ada4cc5ea1c1f254/numpy-2.4.3-cp313-cp313t-win32.whl", hash = "sha256:be3b8487d725a77acccc9924f65fd8bce9af7fac8c9820df1049424a2115af6c", size = 6082814, upload-time = "2026-03-09T07:57:36.491Z" }, + { url = "https://files.pythonhosted.org/packages/e2/9e/52f6eaa13e1a799f0ab79066c17f7016a4a8ae0c1aefa58c82b4dab690b4/numpy-2.4.3-cp313-cp313t-win_amd64.whl", hash = "sha256:1ec84fd7c8e652b0f4aaaf2e6e9cc8eaa9b1b80a537e06b2e3a2fb176eedcb26", size = 12452673, upload-time = "2026-03-09T07:57:38.281Z" }, + { url = "https://files.pythonhosted.org/packages/c4/04/b8cece6ead0b30c9fbd99bb835ad7ea0112ac5f39f069788c5558e3b1ab2/numpy-2.4.3-cp313-cp313t-win_arm64.whl", hash = "sha256:120df8c0a81ebbf5b9020c91439fccd85f5e018a927a39f624845be194a2be02", size = 10290907, upload-time = "2026-03-09T07:57:40.747Z" }, + { url = "https://files.pythonhosted.org/packages/70/ae/3936f79adebf8caf81bd7a599b90a561334a658be4dcc7b6329ebf4ee8de/numpy-2.4.3-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:5884ce5c7acfae1e4e1b6fde43797d10aa506074d25b531b4f54bde33c0c31d4", size = 16664563, upload-time = "2026-03-09T07:57:43.817Z" }, + { url = "https://files.pythonhosted.org/packages/9b/62/760f2b55866b496bb1fa7da2a6db076bef908110e568b02fcfc1422e2a3a/numpy-2.4.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:297837823f5bc572c5f9379b0c9f3a3365f08492cbdc33bcc3af174372ebb168", size = 14702161, upload-time = "2026-03-09T07:57:46.169Z" }, + { url = "https://files.pythonhosted.org/packages/32/af/a7a39464e2c0a21526fb4fb76e346fb172ebc92f6d1c7a07c2c139cc17b1/numpy-2.4.3-cp314-cp314-macosx_14_0_arm64.whl", hash = "sha256:a111698b4a3f8dcbe54c64a7708f049355abd603e619013c346553c1fd4ca90b", size = 5208738, upload-time = "2026-03-09T07:57:48.506Z" }, + { url = "https://files.pythonhosted.org/packages/29/8c/2a0cf86a59558fa078d83805589c2de490f29ed4fb336c14313a161d358a/numpy-2.4.3-cp314-cp314-macosx_14_0_x86_64.whl", hash = "sha256:4bd4741a6a676770e0e97fe9ab2e51de01183df3dcbcec591d26d331a40de950", size = 6543618, upload-time = "2026-03-09T07:57:50.591Z" }, + { url = "https://files.pythonhosted.org/packages/aa/b8/612ce010c0728b1c363fa4ea3aa4c22fe1c5da1de008486f8c2f5cb92fae/numpy-2.4.3-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:54f29b877279d51e210e0c80709ee14ccbbad647810e8f3d375561c45ef613dd", size = 15680676, upload-time = "2026-03-09T07:57:52.34Z" }, + { url = "https://files.pythonhosted.org/packages/a9/7e/4f120ecc54ba26ddf3dc348eeb9eb063f421de65c05fc961941798feea18/numpy-2.4.3-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:679f2a834bae9020f81534671c56fd0cc76dd7e5182f57131478e23d0dc59e24", size = 16613492, upload-time = "2026-03-09T07:57:54.91Z" }, + { url = "https://files.pythonhosted.org/packages/2c/86/1b6020db73be330c4b45d5c6ee4295d59cfeef0e3ea323959d053e5a6909/numpy-2.4.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:d84f0f881cb2225c2dfd7f78a10a5645d487a496c6668d6cc39f0f114164f3d0", size = 17031789, upload-time = "2026-03-09T07:57:57.641Z" }, + { url = "https://files.pythonhosted.org/packages/07/3a/3b90463bf41ebc21d1b7e06079f03070334374208c0f9a1f05e4ae8455e7/numpy-2.4.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:d213c7e6e8d211888cc359bab7199670a00f5b82c0978b9d1c75baf1eddbeac0", size = 18339941, upload-time = "2026-03-09T07:58:00.577Z" }, + { url = "https://files.pythonhosted.org/packages/a8/74/6d736c4cd962259fd8bae9be27363eb4883a2f9069763747347544c2a487/numpy-2.4.3-cp314-cp314-win32.whl", hash = "sha256:52077feedeff7c76ed7c9f1a0428558e50825347b7545bbb8523da2cd55c547a", size = 6007503, upload-time = "2026-03-09T07:58:03.331Z" }, + { url = "https://files.pythonhosted.org/packages/48/39/c56ef87af669364356bb011922ef0734fc49dad51964568634c72a009488/numpy-2.4.3-cp314-cp314-win_amd64.whl", hash = "sha256:0448e7f9caefb34b4b7dd2b77f21e8906e5d6f0365ad525f9f4f530b13df2afc", size = 12444915, upload-time = "2026-03-09T07:58:06.353Z" }, + { url = "https://files.pythonhosted.org/packages/9d/1f/ab8528e38d295fd349310807496fabb7cf9fe2e1f70b97bc20a483ea9d4a/numpy-2.4.3-cp314-cp314-win_arm64.whl", hash = "sha256:b44fd60341c4d9783039598efadd03617fa28d041fc37d22b62d08f2027fa0e7", size = 10494875, upload-time = "2026-03-09T07:58:08.734Z" }, + { url = "https://files.pythonhosted.org/packages/e6/ef/b7c35e4d5ef141b836658ab21a66d1a573e15b335b1d111d31f26c8ef80f/numpy-2.4.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:0a195f4216be9305a73c0e91c9b026a35f2161237cf1c6de9b681637772ea657", size = 14822225, upload-time = "2026-03-09T07:58:11.034Z" }, + { url = "https://files.pythonhosted.org/packages/cd/8d/7730fa9278cf6648639946cc816e7cc89f0d891602584697923375f801ed/numpy-2.4.3-cp314-cp314t-macosx_14_0_arm64.whl", hash = "sha256:cd32fbacb9fd1bf041bf8e89e4576b6f00b895f06d00914820ae06a616bdfef7", size = 5328769, upload-time = "2026-03-09T07:58:13.67Z" }, + { url = "https://files.pythonhosted.org/packages/47/01/d2a137317c958b074d338807c1b6a383406cdf8b8e53b075d804cc3d211d/numpy-2.4.3-cp314-cp314t-macosx_14_0_x86_64.whl", hash = "sha256:2e03c05abaee1f672e9d67bc858f300b5ccba1c21397211e8d77d98350972093", size = 6649461, upload-time = "2026-03-09T07:58:15.912Z" }, + { url = "https://files.pythonhosted.org/packages/5c/34/812ce12bc0f00272a4b0ec0d713cd237cb390666eb6206323d1cc9cedbb2/numpy-2.4.3-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7d1ce23cce91fcea443320a9d0ece9b9305d4368875bab09538f7a5b4131938a", size = 15725809, upload-time = "2026-03-09T07:58:17.787Z" }, + { url = "https://files.pythonhosted.org/packages/25/c0/2aed473a4823e905e765fee3dc2cbf504bd3e68ccb1150fbdabd5c39f527/numpy-2.4.3-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c59020932feb24ed49ffd03704fbab89f22aa9c0d4b180ff45542fe8918f5611", size = 16655242, upload-time = "2026-03-09T07:58:20.476Z" }, + { url = "https://files.pythonhosted.org/packages/f2/c8/7e052b2fc87aa0e86de23f20e2c42bd261c624748aa8efd2c78f7bb8d8c6/numpy-2.4.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:9684823a78a6cd6ad7511fc5e25b07947d1d5b5e2812c93fe99d7d4195130720", size = 17080660, upload-time = "2026-03-09T07:58:23.067Z" }, + { url = "https://files.pythonhosted.org/packages/f3/3d/0876746044db2adcb11549f214d104f2e1be00f07a67edbb4e2812094847/numpy-2.4.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:0200b25c687033316fb39f0ff4e3e690e8957a2c3c8d22499891ec58c37a3eb5", size = 18380384, upload-time = "2026-03-09T07:58:25.839Z" }, + { url = "https://files.pythonhosted.org/packages/07/12/8160bea39da3335737b10308df4f484235fd297f556745f13092aa039d3b/numpy-2.4.3-cp314-cp314t-win32.whl", hash = "sha256:5e10da9e93247e554bb1d22f8edc51847ddd7dde52d85ce31024c1b4312bfba0", size = 6154547, upload-time = "2026-03-09T07:58:28.289Z" }, + { url = "https://files.pythonhosted.org/packages/42/f3/76534f61f80d74cc9cdf2e570d3d4eeb92c2280a27c39b0aaf471eda7b48/numpy-2.4.3-cp314-cp314t-win_amd64.whl", hash = "sha256:45f003dbdffb997a03da2d1d0cb41fbd24a87507fb41605c0420a3db5bd4667b", size = 12633645, upload-time = "2026-03-09T07:58:30.384Z" }, + { url = "https://files.pythonhosted.org/packages/1f/b6/7c0d4334c15983cec7f92a69e8ce9b1e6f31857e5ee3a413ac424e6bd63d/numpy-2.4.3-cp314-cp314t-win_arm64.whl", hash = "sha256:4d382735cecd7bcf090172489a525cd7d4087bc331f7df9f60ddc9a296cf208e", size = 10565454, upload-time = "2026-03-09T07:58:33.031Z" }, + { url = "https://files.pythonhosted.org/packages/64/e4/4dab9fb43c83719c29241c535d9e07be73bea4bc0c6686c5816d8e1b6689/numpy-2.4.3-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:c6b124bfcafb9e8d3ed09130dbee44848c20b3e758b6bbf006e641778927c028", size = 16834892, upload-time = "2026-03-09T07:58:35.334Z" }, + { url = "https://files.pythonhosted.org/packages/c9/29/f8b6d4af90fed3dfda84ebc0df06c9833d38880c79ce954e5b661758aa31/numpy-2.4.3-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:76dbb9d4e43c16cf9aa711fcd8de1e2eeb27539dcefb60a1d5e9f12fae1d1ed8", size = 14893070, upload-time = "2026-03-09T07:58:37.7Z" }, + { url = "https://files.pythonhosted.org/packages/9a/04/a19b3c91dbec0a49269407f15d5753673a09832daed40c45e8150e6fa558/numpy-2.4.3-pp311-pypy311_pp73-macosx_14_0_arm64.whl", hash = "sha256:29363fbfa6f8ee855d7569c96ce524845e3d726d6c19b29eceec7dd555dab152", size = 5399609, upload-time = "2026-03-09T07:58:39.853Z" }, + { url = "https://files.pythonhosted.org/packages/79/34/4d73603f5420eab89ea8a67097b31364bf7c30f811d4dd84b1659c7476d9/numpy-2.4.3-pp311-pypy311_pp73-macosx_14_0_x86_64.whl", hash = "sha256:bc71942c789ef415a37f0d4eab90341425a00d538cd0642445d30b41023d3395", size = 6714355, upload-time = "2026-03-09T07:58:42.365Z" }, + { url = "https://files.pythonhosted.org/packages/58/ad/1100d7229bb248394939a12a8074d485b655e8ed44207d328fdd7fcebc7b/numpy-2.4.3-pp311-pypy311_pp73-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7e58765ad74dcebd3ef0208a5078fba32dc8ec3578fe84a604432950cd043d79", size = 15800434, upload-time = "2026-03-09T07:58:44.837Z" }, + { url = "https://files.pythonhosted.org/packages/0c/fd/16d710c085d28ba4feaf29ac60c936c9d662e390344f94a6beaa2ac9899b/numpy-2.4.3-pp311-pypy311_pp73-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8e236dbda4e1d319d681afcbb136c0c4a8e0f1a5c58ceec2adebb547357fe857", size = 16729409, upload-time = "2026-03-09T07:58:47.972Z" }, + { url = "https://files.pythonhosted.org/packages/57/a7/b35835e278c18b85206834b3aa3abe68e77a98769c59233d1f6300284781/numpy-2.4.3-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:4b42639cdde6d24e732ff823a3fa5b701d8acad89c4142bc1d0bd6dc85200ba5", size = 12504685, upload-time = "2026-03-09T07:58:50.525Z" }, +] + +[[package]] +name = "pandas" +version = "3.0.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "numpy" }, + { name = "python-dateutil" }, + { name = "tzdata", marker = "sys_platform == 'emscripten' or sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2e/0c/b28ed414f080ee0ad153f848586d61d1878f91689950f037f976ce15f6c8/pandas-3.0.1.tar.gz", hash = "sha256:4186a699674af418f655dbd420ed87f50d56b4cd6603784279d9eef6627823c8", size = 4641901, upload-time = "2026-02-17T22:20:16.434Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ff/07/c7087e003ceee9b9a82539b40414ec557aa795b584a1a346e89180853d79/pandas-3.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:de09668c1bf3b925c07e5762291602f0d789eca1b3a781f99c1c78f6cac0e7ea", size = 10323380, upload-time = "2026-02-17T22:18:16.133Z" }, + { url = "https://files.pythonhosted.org/packages/c1/27/90683c7122febeefe84a56f2cde86a9f05f68d53885cebcc473298dfc33e/pandas-3.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:24ba315ba3d6e5806063ac6eb717504e499ce30bd8c236d8693a5fd3f084c796", size = 9923455, upload-time = "2026-02-17T22:18:19.13Z" }, + { url = "https://files.pythonhosted.org/packages/0e/f1/ed17d927f9950643bc7631aa4c99ff0cc83a37864470bc419345b656a41f/pandas-3.0.1-cp311-cp311-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:406ce835c55bac912f2a0dcfaf27c06d73c6b04a5dde45f1fd3169ce31337389", size = 10753464, upload-time = "2026-02-17T22:18:21.134Z" }, + { url = "https://files.pythonhosted.org/packages/2e/7c/870c7e7daec2a6c7ff2ac9e33b23317230d4e4e954b35112759ea4a924a7/pandas-3.0.1-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:830994d7e1f31dd7e790045235605ab61cff6c94defc774547e8b7fdfbff3dc7", size = 11255234, upload-time = "2026-02-17T22:18:24.175Z" }, + { url = "https://files.pythonhosted.org/packages/5c/39/3653fe59af68606282b989c23d1a543ceba6e8099cbcc5f1d506a7bae2aa/pandas-3.0.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a64ce8b0f2de1d2efd2ae40b0abe7f8ae6b29fbfb3812098ed5a6f8e235ad9bf", size = 11767299, upload-time = "2026-02-17T22:18:26.824Z" }, + { url = "https://files.pythonhosted.org/packages/9b/31/1daf3c0c94a849c7a8dab8a69697b36d313b229918002ba3e409265c7888/pandas-3.0.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9832c2c69da24b602c32e0c7b1b508a03949c18ba08d4d9f1c1033426685b447", size = 12333292, upload-time = "2026-02-17T22:18:28.996Z" }, + { url = "https://files.pythonhosted.org/packages/1f/67/af63f83cd6ca603a00fe8530c10a60f0879265b8be00b5930e8e78c5b30b/pandas-3.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:84f0904a69e7365f79a0c77d3cdfccbfb05bf87847e3a51a41e1426b0edb9c79", size = 9892176, upload-time = "2026-02-17T22:18:31.79Z" }, + { url = "https://files.pythonhosted.org/packages/79/ab/9c776b14ac4b7b4140788eca18468ea39894bc7340a408f1d1e379856a6b/pandas-3.0.1-cp311-cp311-win_arm64.whl", hash = "sha256:4a68773d5a778afb31d12e34f7dd4612ab90de8c6fb1d8ffe5d4a03b955082a1", size = 9151328, upload-time = "2026-02-17T22:18:35.721Z" }, + { url = "https://files.pythonhosted.org/packages/37/51/b467209c08dae2c624873d7491ea47d2b47336e5403309d433ea79c38571/pandas-3.0.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:476f84f8c20c9f5bc47252b66b4bb25e1a9fc2fa98cead96744d8116cb85771d", size = 10344357, upload-time = "2026-02-17T22:18:38.262Z" }, + { url = "https://files.pythonhosted.org/packages/7c/f1/e2567ffc8951ab371db2e40b2fe068e36b81d8cf3260f06ae508700e5504/pandas-3.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0ab749dfba921edf641d4036c4c21c0b3ea70fea478165cb98a998fb2a261955", size = 9884543, upload-time = "2026-02-17T22:18:41.476Z" }, + { url = "https://files.pythonhosted.org/packages/d7/39/327802e0b6d693182403c144edacbc27eb82907b57062f23ef5a4c4a5ea7/pandas-3.0.1-cp312-cp312-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b8e36891080b87823aff3640c78649b91b8ff6eea3c0d70aeabd72ea43ab069b", size = 10396030, upload-time = "2026-02-17T22:18:43.822Z" }, + { url = "https://files.pythonhosted.org/packages/3d/fe/89d77e424365280b79d99b3e1e7d606f5165af2f2ecfaf0c6d24c799d607/pandas-3.0.1-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:532527a701281b9dd371e2f582ed9094f4c12dd9ffb82c0c54ee28d8ac9520c4", size = 10876435, upload-time = "2026-02-17T22:18:45.954Z" }, + { url = "https://files.pythonhosted.org/packages/b5/a6/2a75320849dd154a793f69c951db759aedb8d1dd3939eeacda9bdcfa1629/pandas-3.0.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:356e5c055ed9b0da1580d465657bc7d00635af4fd47f30afb23025352ba764d1", size = 11405133, upload-time = "2026-02-17T22:18:48.533Z" }, + { url = "https://files.pythonhosted.org/packages/58/53/1d68fafb2e02d7881df66aa53be4cd748d25cbe311f3b3c85c93ea5d30ca/pandas-3.0.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:9d810036895f9ad6345b8f2a338dd6998a74e8483847403582cab67745bff821", size = 11932065, upload-time = "2026-02-17T22:18:50.837Z" }, + { url = "https://files.pythonhosted.org/packages/75/08/67cc404b3a966b6df27b38370ddd96b3b023030b572283d035181854aac5/pandas-3.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:536232a5fe26dd989bd633e7a0c450705fdc86a207fec7254a55e9a22950fe43", size = 9741627, upload-time = "2026-02-17T22:18:53.905Z" }, + { url = "https://files.pythonhosted.org/packages/86/4f/caf9952948fb00d23795f09b893d11f1cacb384e666854d87249530f7cbe/pandas-3.0.1-cp312-cp312-win_arm64.whl", hash = "sha256:0f463ebfd8de7f326d38037c7363c6dacb857c5881ab8961fb387804d6daf2f7", size = 9052483, upload-time = "2026-02-17T22:18:57.31Z" }, + { url = "https://files.pythonhosted.org/packages/0b/48/aad6ec4f8d007534c091e9a7172b3ec1b1ee6d99a9cbb936b5eab6c6cf58/pandas-3.0.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5272627187b5d9c20e55d27caf5f2cd23e286aba25cadf73c8590e432e2b7262", size = 10317509, upload-time = "2026-02-17T22:18:59.498Z" }, + { url = "https://files.pythonhosted.org/packages/a8/14/5990826f779f79148ae9d3a2c39593dc04d61d5d90541e71b5749f35af95/pandas-3.0.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:661e0f665932af88c7877f31da0dc743fe9c8f2524bdffe23d24fdcb67ef9d56", size = 9860561, upload-time = "2026-02-17T22:19:02.265Z" }, + { url = "https://files.pythonhosted.org/packages/fa/80/f01ff54664b6d70fed71475543d108a9b7c888e923ad210795bef04ffb7d/pandas-3.0.1-cp313-cp313-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:75e6e292ff898679e47a2199172593d9f6107fd2dd3617c22c2946e97d5df46e", size = 10365506, upload-time = "2026-02-17T22:19:05.017Z" }, + { url = "https://files.pythonhosted.org/packages/f2/85/ab6d04733a7d6ff32bfc8382bf1b07078228f5d6ebec5266b91bfc5c4ff7/pandas-3.0.1-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1ff8cf1d2896e34343197685f432450ec99a85ba8d90cce2030c5eee2ef98791", size = 10873196, upload-time = "2026-02-17T22:19:07.204Z" }, + { url = "https://files.pythonhosted.org/packages/48/a9/9301c83d0b47c23ac5deab91c6b39fd98d5b5db4d93b25df8d381451828f/pandas-3.0.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:eca8b4510f6763f3d37359c2105df03a7a221a508f30e396a51d0713d462e68a", size = 11370859, upload-time = "2026-02-17T22:19:09.436Z" }, + { url = "https://files.pythonhosted.org/packages/59/fe/0c1fc5bd2d29c7db2ab372330063ad555fb83e08422829c785f5ec2176ca/pandas-3.0.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:06aff2ad6f0b94a17822cf8b83bbb563b090ed82ff4fe7712db2ce57cd50d9b8", size = 11924584, upload-time = "2026-02-17T22:19:11.562Z" }, + { url = "https://files.pythonhosted.org/packages/d6/7d/216a1588b65a7aa5f4535570418a599d943c85afb1d95b0876fc00aa1468/pandas-3.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:9fea306c783e28884c29057a1d9baa11a349bbf99538ec1da44c8476563d1b25", size = 9742769, upload-time = "2026-02-17T22:19:13.926Z" }, + { url = "https://files.pythonhosted.org/packages/c4/cb/810a22a6af9a4e97c8ab1c946b47f3489c5bca5adc483ce0ffc84c9cc768/pandas-3.0.1-cp313-cp313-win_arm64.whl", hash = "sha256:a8d37a43c52917427e897cb2e429f67a449327394396a81034a4449b99afda59", size = 9043855, upload-time = "2026-02-17T22:19:16.09Z" }, + { url = "https://files.pythonhosted.org/packages/92/fa/423c89086cca1f039cf1253c3ff5b90f157b5b3757314aa635f6bf3e30aa/pandas-3.0.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:d54855f04f8246ed7b6fc96b05d4871591143c46c0b6f4af874764ed0d2d6f06", size = 10752673, upload-time = "2026-02-17T22:19:18.304Z" }, + { url = "https://files.pythonhosted.org/packages/22/23/b5a08ec1f40020397f0faba72f1e2c11f7596a6169c7b3e800abff0e433f/pandas-3.0.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:4e1b677accee34a09e0dc2ce5624e4a58a1870ffe56fc021e9caf7f23cd7668f", size = 10404967, upload-time = "2026-02-17T22:19:20.726Z" }, + { url = "https://files.pythonhosted.org/packages/5c/81/94841f1bb4afdc2b52a99daa895ac2c61600bb72e26525ecc9543d453ebc/pandas-3.0.1-cp313-cp313t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a9cabbdcd03f1b6cd254d6dda8ae09b0252524be1592594c00b7895916cb1324", size = 10320575, upload-time = "2026-02-17T22:19:24.919Z" }, + { url = "https://files.pythonhosted.org/packages/0a/8b/2ae37d66a5342a83adadfd0cb0b4bf9c3c7925424dd5f40d15d6cfaa35ee/pandas-3.0.1-cp313-cp313t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5ae2ab1f166668b41e770650101e7090824fd34d17915dd9cd479f5c5e0065e9", size = 10710921, upload-time = "2026-02-17T22:19:27.181Z" }, + { url = "https://files.pythonhosted.org/packages/a2/61/772b2e2757855e232b7ccf7cb8079a5711becb3a97f291c953def15a833f/pandas-3.0.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6bf0603c2e30e2cafac32807b06435f28741135cb8697eae8b28c7d492fc7d76", size = 11334191, upload-time = "2026-02-17T22:19:29.411Z" }, + { url = "https://files.pythonhosted.org/packages/1b/08/b16c6df3ef555d8495d1d265a7963b65be166785d28f06a350913a4fac78/pandas-3.0.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:6c426422973973cae1f4a23e51d4ae85974f44871b24844e4f7de752dd877098", size = 11782256, upload-time = "2026-02-17T22:19:32.34Z" }, + { url = "https://files.pythonhosted.org/packages/55/80/178af0594890dee17e239fca96d3d8670ba0f5ff59b7d0439850924a9c09/pandas-3.0.1-cp313-cp313t-win_amd64.whl", hash = "sha256:b03f91ae8c10a85c1613102c7bef5229b5379f343030a3ccefeca8a33414cf35", size = 10485047, upload-time = "2026-02-17T22:19:34.605Z" }, + { url = "https://files.pythonhosted.org/packages/bb/8b/4bb774a998b97e6c2fd62a9e6cfdaae133b636fd1c468f92afb4ae9a447a/pandas-3.0.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:99d0f92ed92d3083d140bf6b97774f9f13863924cf3f52a70711f4e7588f9d0a", size = 10322465, upload-time = "2026-02-17T22:19:36.803Z" }, + { url = "https://files.pythonhosted.org/packages/72/3a/5b39b51c64159f470f1ca3b1c2a87da290657ca022f7cd11442606f607d1/pandas-3.0.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:3b66857e983208654294bb6477b8a63dee26b37bdd0eb34d010556e91261784f", size = 9910632, upload-time = "2026-02-17T22:19:39.001Z" }, + { url = "https://files.pythonhosted.org/packages/4e/f7/b449ffb3f68c11da12fc06fbf6d2fa3a41c41e17d0284d23a79e1c13a7e4/pandas-3.0.1-cp314-cp314-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:56cf59638bf24dc9bdf2154c81e248b3289f9a09a6d04e63608c159022352749", size = 10440535, upload-time = "2026-02-17T22:19:41.157Z" }, + { url = "https://files.pythonhosted.org/packages/55/77/6ea82043db22cb0f2bbfe7198da3544000ddaadb12d26be36e19b03a2dc5/pandas-3.0.1-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c1a9f55e0f46951874b863d1f3906dcb57df2d9be5c5847ba4dfb55b2c815249", size = 10893940, upload-time = "2026-02-17T22:19:43.493Z" }, + { url = "https://files.pythonhosted.org/packages/03/30/f1b502a72468c89412c1b882a08f6eed8a4ee9dc033f35f65d0663df6081/pandas-3.0.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:1849f0bba9c8a2fb0f691d492b834cc8dadf617e29015c66e989448d58d011ee", size = 11442711, upload-time = "2026-02-17T22:19:46.074Z" }, + { url = "https://files.pythonhosted.org/packages/0d/f0/ebb6ddd8fc049e98cabac5c2924d14d1dda26a20adb70d41ea2e428d3ec4/pandas-3.0.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:c3d288439e11b5325b02ae6e9cc83e6805a62c40c5a6220bea9beb899c073b1c", size = 11963918, upload-time = "2026-02-17T22:19:48.838Z" }, + { url = "https://files.pythonhosted.org/packages/09/f8/8ce132104074f977f907442790eaae24e27bce3b3b454e82faa3237ff098/pandas-3.0.1-cp314-cp314-win_amd64.whl", hash = "sha256:93325b0fe372d192965f4cca88d97667f49557398bbf94abdda3bf1b591dbe66", size = 9862099, upload-time = "2026-02-17T22:19:51.081Z" }, + { url = "https://files.pythonhosted.org/packages/e6/b7/6af9aac41ef2456b768ef0ae60acf8abcebb450a52043d030a65b4b7c9bd/pandas-3.0.1-cp314-cp314-win_arm64.whl", hash = "sha256:97ca08674e3287c7148f4858b01136f8bdfe7202ad25ad04fec602dd1d29d132", size = 9185333, upload-time = "2026-02-17T22:19:53.266Z" }, + { url = "https://files.pythonhosted.org/packages/66/fc/848bb6710bc6061cb0c5badd65b92ff75c81302e0e31e496d00029fe4953/pandas-3.0.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:58eeb1b2e0fb322befcf2bbc9ba0af41e616abadb3d3414a6bc7167f6cbfce32", size = 10772664, upload-time = "2026-02-17T22:19:55.806Z" }, + { url = "https://files.pythonhosted.org/packages/69/5c/866a9bbd0f79263b4b0db6ec1a341be13a1473323f05c122388e0f15b21d/pandas-3.0.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:cd9af1276b5ca9e298bd79a26bda32fa9cc87ed095b2a9a60978d2ca058eaf87", size = 10421286, upload-time = "2026-02-17T22:19:58.091Z" }, + { url = "https://files.pythonhosted.org/packages/51/a4/2058fb84fb1cfbfb2d4a6d485e1940bb4ad5716e539d779852494479c580/pandas-3.0.1-cp314-cp314t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:94f87a04984d6b63788327cd9f79dda62b7f9043909d2440ceccf709249ca988", size = 10342050, upload-time = "2026-02-17T22:20:01.376Z" }, + { url = "https://files.pythonhosted.org/packages/22/1b/674e89996cc4be74db3c4eb09240c4bb549865c9c3f5d9b086ff8fcfbf00/pandas-3.0.1-cp314-cp314t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:85fe4c4df62e1e20f9db6ebfb88c844b092c22cd5324bdcf94bfa2fc1b391221", size = 10740055, upload-time = "2026-02-17T22:20:04.328Z" }, + { url = "https://files.pythonhosted.org/packages/d0/f8/e954b750764298c22fa4614376531fe63c521ef517e7059a51f062b87dca/pandas-3.0.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:331ca75a2f8672c365ae25c0b29e46f5ac0c6551fdace8eec4cd65e4fac271ff", size = 11357632, upload-time = "2026-02-17T22:20:06.647Z" }, + { url = "https://files.pythonhosted.org/packages/6d/02/c6e04b694ffd68568297abd03588b6d30295265176a5c01b7459d3bc35a3/pandas-3.0.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:15860b1fdb1973fffade772fdb931ccf9b2f400a3f5665aef94a00445d7d8dd5", size = 11810974, upload-time = "2026-02-17T22:20:08.946Z" }, + { url = "https://files.pythonhosted.org/packages/89/41/d7dfb63d2407f12055215070c42fc6ac41b66e90a2946cdc5e759058398b/pandas-3.0.1-cp314-cp314t-win_amd64.whl", hash = "sha256:44f1364411d5670efa692b146c748f4ed013df91ee91e9bec5677fb1fd58b937", size = 10884622, upload-time = "2026-02-17T22:20:11.711Z" }, + { url = "https://files.pythonhosted.org/packages/68/b0/34937815889fa982613775e4b97fddd13250f11012d769949c5465af2150/pandas-3.0.1-cp314-cp314t-win_arm64.whl", hash = "sha256:108dd1790337a494aa80e38def654ca3f0968cf4f362c85f44c15e471667102d", size = 9452085, upload-time = "2026-02-17T22:20:14.331Z" }, +] + +[[package]] +name = "pathspec" +version = "1.0.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fa/36/e27608899f9b8d4dff0617b2d9ab17ca5608956ca44461ac14ac48b44015/pathspec-1.0.4.tar.gz", hash = "sha256:0210e2ae8a21a9137c0d470578cb0e595af87edaa6ebf12ff176f14a02e0e645", size = 131200, upload-time = "2026-01-27T03:59:46.938Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ef/3c/2c197d226f9ea224a9ab8d197933f9da0ae0aac5b6e0f884e2b8d9c8e9f7/pathspec-1.0.4-py3-none-any.whl", hash = "sha256:fb6ae2fd4e7c921a165808a552060e722767cfa526f99ca5156ed2ce45a5c723", size = 55206, upload-time = "2026-01-27T03:59:45.137Z" }, +] + +[[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 = "pygithub" +version = "2.8.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyjwt", extra = ["crypto"] }, + { name = "pynacl" }, + { name = "requests" }, + { name = "typing-extensions" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c1/74/e560bdeffea72ecb26cff27f0fad548bbff5ecc51d6a155311ea7f9e4c4c/pygithub-2.8.1.tar.gz", hash = "sha256:341b7c78521cb07324ff670afd1baa2bf5c286f8d9fd302c1798ba594a5400c9", size = 2246994, upload-time = "2025-09-02T17:41:54.674Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/07/ba/7049ce39f653f6140aac4beb53a5aaf08b4407b6a3019aae394c1c5244ff/pygithub-2.8.1-py3-none-any.whl", hash = "sha256:23a0a5bca93baef082e03411bf0ce27204c32be8bfa7abc92fe4a3e132936df0", size = 432709, upload-time = "2025-09-02T17:41:52.947Z" }, +] + +[[package]] +name = "pyjwt" +version = "2.12.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c2/27/a3b6e5bf6ff856d2509292e95c8f57f0df7017cf5394921fc4e4ef40308a/pyjwt-2.12.1.tar.gz", hash = "sha256:c74a7a2adf861c04d002db713dd85f84beb242228e671280bf709d765b03672b", size = 102564, upload-time = "2026-03-13T19:27:37.25Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e5/7a/8dd906bd22e79e47397a61742927f6747fe93242ef86645ee9092e610244/pyjwt-2.12.1-py3-none-any.whl", hash = "sha256:28ca37c070cad8ba8cd9790cd940535d40274d22f80ab87f3ac6a713e6e8454c", size = 29726, upload-time = "2026-03-13T19:27:35.677Z" }, +] + +[package.optional-dependencies] +crypto = [ + { name = "cryptography" }, +] + +[[package]] +name = "pynacl" +version = "1.6.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d9/9a/4019b524b03a13438637b11538c82781a5eda427394380381af8f04f467a/pynacl-1.6.2.tar.gz", hash = "sha256:018494d6d696ae03c7e656e5e74cdfd8ea1326962cc401bcf018f1ed8436811c", size = 3511692, upload-time = "2026-01-01T17:48:10.851Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4b/79/0e3c34dc3c4671f67d251c07aa8eb100916f250ee470df230b0ab89551b4/pynacl-1.6.2-cp314-cp314t-macosx_10_10_universal2.whl", hash = "sha256:622d7b07cc5c02c666795792931b50c91f3ce3c2649762efb1ef0d5684c81594", size = 390064, upload-time = "2026-01-01T17:31:57.264Z" }, + { url = "https://files.pythonhosted.org/packages/eb/1c/23a26e931736e13b16483795c8a6b2f641bf6a3d5238c22b070a5112722c/pynacl-1.6.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d071c6a9a4c94d79eb665db4ce5cedc537faf74f2355e4d502591d850d3913c0", size = 809370, upload-time = "2026-01-01T17:31:59.198Z" }, + { url = "https://files.pythonhosted.org/packages/87/74/8d4b718f8a22aea9e8dcc8b95deb76d4aae380e2f5b570cc70b5fd0a852d/pynacl-1.6.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fe9847ca47d287af41e82be1dd5e23023d3c31a951da134121ab02e42ac218c9", size = 1408304, upload-time = "2026-01-01T17:32:01.162Z" }, + { url = "https://files.pythonhosted.org/packages/fd/73/be4fdd3a6a87fe8a4553380c2b47fbd1f7f58292eb820902f5c8ac7de7b0/pynacl-1.6.2-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:04316d1fc625d860b6c162fff704eb8426b1a8bcd3abacea11142cbd99a6b574", size = 844871, upload-time = "2026-01-01T17:32:02.824Z" }, + { url = "https://files.pythonhosted.org/packages/55/ad/6efc57ab75ee4422e96b5f2697d51bbcf6cdcc091e66310df91fbdc144a8/pynacl-1.6.2-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:44081faff368d6c5553ccf55322ef2819abb40e25afaec7e740f159f74813634", size = 1446356, upload-time = "2026-01-01T17:32:04.452Z" }, + { url = "https://files.pythonhosted.org/packages/78/b7/928ee9c4779caa0a915844311ab9fb5f99585621c5d6e4574538a17dca07/pynacl-1.6.2-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:a9f9932d8d2811ce1a8ffa79dcbdf3970e7355b5c8eb0c1a881a57e7f7d96e88", size = 826814, upload-time = "2026-01-01T17:32:06.078Z" }, + { url = "https://files.pythonhosted.org/packages/f7/a9/1bdba746a2be20f8809fee75c10e3159d75864ef69c6b0dd168fc60e485d/pynacl-1.6.2-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:bc4a36b28dd72fb4845e5d8f9760610588a96d5a51f01d84d8c6ff9849968c14", size = 1411742, upload-time = "2026-01-01T17:32:07.651Z" }, + { url = "https://files.pythonhosted.org/packages/f3/2f/5e7ea8d85f9f3ea5b6b87db1d8388daa3587eed181bdeb0306816fdbbe79/pynacl-1.6.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:3bffb6d0f6becacb6526f8f42adfb5efb26337056ee0831fb9a7044d1a964444", size = 801714, upload-time = "2026-01-01T17:32:09.558Z" }, + { url = "https://files.pythonhosted.org/packages/06/ea/43fe2f7eab5f200e40fb10d305bf6f87ea31b3bbc83443eac37cd34a9e1e/pynacl-1.6.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:2fef529ef3ee487ad8113d287a593fa26f48ee3620d92ecc6f1d09ea38e0709b", size = 1372257, upload-time = "2026-01-01T17:32:11.026Z" }, + { url = "https://files.pythonhosted.org/packages/4d/54/c9ea116412788629b1347e415f72195c25eb2f3809b2d3e7b25f5c79f13a/pynacl-1.6.2-cp314-cp314t-win32.whl", hash = "sha256:a84bf1c20339d06dc0c85d9aea9637a24f718f375d861b2668b2f9f96fa51145", size = 231319, upload-time = "2026-01-01T17:32:12.46Z" }, + { url = "https://files.pythonhosted.org/packages/ce/04/64e9d76646abac2dccf904fccba352a86e7d172647557f35b9fe2a5ee4a1/pynacl-1.6.2-cp314-cp314t-win_amd64.whl", hash = "sha256:320ef68a41c87547c91a8b58903c9caa641ab01e8512ce291085b5fe2fcb7590", size = 244044, upload-time = "2026-01-01T17:32:13.781Z" }, + { url = "https://files.pythonhosted.org/packages/33/33/7873dc161c6a06f43cda13dec67b6fe152cb2f982581151956fa5e5cdb47/pynacl-1.6.2-cp314-cp314t-win_arm64.whl", hash = "sha256:d29bfe37e20e015a7d8b23cfc8bd6aa7909c92a1b8f41ee416bbb3e79ef182b2", size = 188740, upload-time = "2026-01-01T17:32:15.083Z" }, + { url = "https://files.pythonhosted.org/packages/be/7b/4845bbf88e94586ec47a432da4e9107e3fc3ce37eb412b1398630a37f7dd/pynacl-1.6.2-cp38-abi3-macosx_10_10_universal2.whl", hash = "sha256:c949ea47e4206af7c8f604b8278093b674f7c79ed0d4719cc836902bf4517465", size = 388458, upload-time = "2026-01-01T17:32:16.829Z" }, + { url = "https://files.pythonhosted.org/packages/1e/b4/e927e0653ba63b02a4ca5b4d852a8d1d678afbf69b3dbf9c4d0785ac905c/pynacl-1.6.2-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8845c0631c0be43abdd865511c41eab235e0be69c81dc66a50911594198679b0", size = 800020, upload-time = "2026-01-01T17:32:18.34Z" }, + { url = "https://files.pythonhosted.org/packages/7f/81/d60984052df5c97b1d24365bc1e30024379b42c4edcd79d2436b1b9806f2/pynacl-1.6.2-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:22de65bb9010a725b0dac248f353bb072969c94fa8d6b1f34b87d7953cf7bbe4", size = 1399174, upload-time = "2026-01-01T17:32:20.239Z" }, + { url = "https://files.pythonhosted.org/packages/68/f7/322f2f9915c4ef27d140101dd0ed26b479f7e6f5f183590fd32dfc48c4d3/pynacl-1.6.2-cp38-abi3-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:46065496ab748469cdd999246d17e301b2c24ae2fdf739132e580a0e94c94a87", size = 835085, upload-time = "2026-01-01T17:32:22.24Z" }, + { url = "https://files.pythonhosted.org/packages/3e/d0/f301f83ac8dbe53442c5a43f6a39016f94f754d7a9815a875b65e218a307/pynacl-1.6.2-cp38-abi3-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8a66d6fb6ae7661c58995f9c6435bda2b1e68b54b598a6a10247bfcdadac996c", size = 1437614, upload-time = "2026-01-01T17:32:23.766Z" }, + { url = "https://files.pythonhosted.org/packages/c4/58/fc6e649762b029315325ace1a8c6be66125e42f67416d3dbd47b69563d61/pynacl-1.6.2-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:26bfcd00dcf2cf160f122186af731ae30ab120c18e8375684ec2670dccd28130", size = 818251, upload-time = "2026-01-01T17:32:25.69Z" }, + { url = "https://files.pythonhosted.org/packages/c9/a8/b917096b1accc9acd878819a49d3d84875731a41eb665f6ebc826b1af99e/pynacl-1.6.2-cp38-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:c8a231e36ec2cab018c4ad4358c386e36eede0319a0c41fed24f840b1dac59f6", size = 1402859, upload-time = "2026-01-01T17:32:27.215Z" }, + { url = "https://files.pythonhosted.org/packages/85/42/fe60b5f4473e12c72f977548e4028156f4d340b884c635ec6b063fe7e9a5/pynacl-1.6.2-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:68be3a09455743ff9505491220b64440ced8973fe930f270c8e07ccfa25b1f9e", size = 791926, upload-time = "2026-01-01T17:32:29.314Z" }, + { url = "https://files.pythonhosted.org/packages/fa/f9/e40e318c604259301cc091a2a63f237d9e7b424c4851cafaea4ea7c4834e/pynacl-1.6.2-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:8b097553b380236d51ed11356c953bf8ce36a29a3e596e934ecabe76c985a577", size = 1363101, upload-time = "2026-01-01T17:32:31.263Z" }, + { url = "https://files.pythonhosted.org/packages/48/47/e761c254f410c023a469284a9bc210933e18588ca87706ae93002c05114c/pynacl-1.6.2-cp38-abi3-win32.whl", hash = "sha256:5811c72b473b2f38f7e2a3dc4f8642e3a3e9b5e7317266e4ced1fba85cae41aa", size = 227421, upload-time = "2026-01-01T17:32:33.076Z" }, + { url = "https://files.pythonhosted.org/packages/41/ad/334600e8cacc7d86587fe5f565480fde569dfb487389c8e1be56ac21d8ac/pynacl-1.6.2-cp38-abi3-win_amd64.whl", hash = "sha256:62985f233210dee6548c223301b6c25440852e13d59a8b81490203c3227c5ba0", size = 239754, upload-time = "2026-01-01T17:32:34.557Z" }, + { url = "https://files.pythonhosted.org/packages/29/7d/5945b5af29534641820d3bd7b00962abbbdfee84ec7e19f0d5b3175f9a31/pynacl-1.6.2-cp38-abi3-win_arm64.whl", hash = "sha256:834a43af110f743a754448463e8fd61259cd4ab5bbedcf70f9dabad1d28a394c", size = 184801, upload-time = "2026-01-01T17:32:36.309Z" }, +] + +[[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 = "requests" +version = "2.32.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "charset-normalizer" }, + { name = "idna" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c9/74/b3ff8e6c8446842c3f5c837e9c3dfcfe2018ea6ecef224c710c85ef728f4/requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf", size = 134517, upload-time = "2025-08-18T20:46:02.573Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6", size = 64738, upload-time = "2025-08-18T20:46:00.542Z" }, +] + +[[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 = "typing-extensions" +version = "4.15.0" +source = { registry = "https://pypi.org/simple" } +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 = "tzdata" +version = "2025.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5e/a7/c202b344c5ca7daf398f3b8a477eeb205cf3b6f32e7ec3a6bac0629ca975/tzdata-2025.3.tar.gz", hash = "sha256:de39c2ca5dc7b0344f2eba86f49d614019d29f060fc4ebc8a417896a620b56a7", size = 196772, upload-time = "2025-12-13T17:45:35.667Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c7/b0/003792df09decd6849a5e39c28b513c06e84436a54440380862b5aeff25d/tzdata-2025.3-py2.py3-none-any.whl", hash = "sha256:06a47e5700f3081aab02b2e513160914ff0694bce9947d6b76ebd6bf57cfc5d1", size = 348521, upload-time = "2025-12-13T17:45:33.889Z" }, +] + +[[package]] +name = "urllib3" +version = "2.6.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c7/24/5f1b3bdffd70275f6661c76461e25f024d5a38a46f04aaca912426a2b1d3/urllib3-2.6.3.tar.gz", hash = "sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed", size = 435556, upload-time = "2026-01-07T16:24:43.925Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl", hash = "sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4", size = 131584, upload-time = "2026-01-07T16:24:42.685Z" }, +]